Most people hear "manage your ad copy" and picture a tidier folder. But the text isn't what disappears — it's sitting in Ads Manager and will still be there next year.
What disappears is why that line was written, and what happened when it ran. Without those two, an archive is a list of sentences, and a list of sentences helps nobody.
Where your copy actually lives right now
Count the places one team's copy is scattered across.
- Slack threads. Twelve alternates, then "let's go with the third one," then the thread scrolls out of reach.
- A Google Sheet with tabs named
copy_final,copy_final_v2,FINAL_use_this_one. Nobody can tell which one shipped. - The ad platform UI, which keeps what ran and nothing about what lost, or why.
- The designer's files, where the shipped headline is only a text layer in a PSD.
Three symptoms follow, all expensive in ways no invoice shows.
You can't answer "have we tried this line before?" So you write something new to be safe, and occasionally run an angle a third time that already failed twice.
The same copy gets rewritten every quarter. March's line is reinvented in September from a blank document. The cost isn't the copywriting, it's making the same decision twice with no memory of the first.
A departing teammate takes the reasoning with them. Their replacement reads the lines but not the judgment behind them, so they start over.
Step 1 — File copy under an appeal, never under a campaign
The default is campaign folders: spring_2026, mothers_day_promo, bfcm_wave_2. Fine while the campaign is live, useless six months later.
The reason is mechanical. To find copy in a campaign folder you must recall the campaign name. But what's in your head is never "mothers day promo" — it's "that comfort angle we ran." Storage key and retrieval key don't match, so you don't retrieve.
Campaigns end. Appeals recur. As long as you sell the same product, "comfort," "battery life" and "value for the price" are live next year too. Build drawers around the part that repeats.
| Campaign folders | Appeal structure | |
|---|---|---|
| Top level | mothers_day_promo | Appeal: comfort |
| Underneath | copy_final_v2.xlsx | Primary copy → channel versions → results |
| How you find it | Recall the campaign name | Go straight to the appeal |
| The question in 6 months | "What was that promo called?" | "What have we tried on comfort?" |
| What accumulates | Folder count | Copy history and verdicts per appeal |
If "appeal" is doing fuzzy work on your team, settle the definition first in what an ad appeal is. The rest depends on everyone meaning the same thing by it.
Keep 8–12 appeals open at a time, and decide which one a new line belongs to before you polish it. A line that fits none of them is either a new appeal or something merely nice.
Step 2 — Separate the primary copy from the channel versions
Stack ten lines flat under one appeal and you're back where you started. Split once more.
- Primary copy. One line stating the idea as precisely as you can say it, with no length constraint.
- Channel versions. Everything derived from it to fit a spec — Kakao Bizboard, Meta feed, Naver GFA.
Take "comfort" on wireless earbuds. The primary copy: "Earbuds that don't hurt after three hours." Everything else descends from it.
| Layer | Constraint | The line |
|---|---|---|
| Primary copy | none | Earbuds that don't hurt after three hours |
| Kakao Bizboard | ~13 characters | Three hours, no ache |
| Meta feed body | first 125 characters carry it | You stop taking them out between meetings. We redesigned the surface that touches the ear |
| Naver GFA title | short | Comfortable to wear all day |
The failure I see most often: treating the shortest channel's version as the canonical line. The 13-character Bizboard version wins, gets promoted to the top of the appeal, and every later version is written by stretching those 13 characters back out. Nuance you cut to fit a format can't be recovered by inflating what's left.
Always work long to short. Per-platform limits are collected in ad copy character limits, with a free character counter for when you're cutting.
Step 3 — Record the reason, not just the text
Two columns produce almost all the value in a copy log: what changed versus the previous version, and what you expected it to do. Without them you have a list. With them, every number that comes back answers a question you asked on purpose.
| Version | Copy | What changed vs. previous | What we expected |
|---|---|---|---|
| v1 | Earbuds that don't hurt after three hours | first version | Find out if comfort sells at all |
| v2 | Three back-to-back meetings, no ache | duration → specific situation | Office workers read it as about them |
| v3 | We widened the inner contact surface by 2mm | claim → proof | Convince people who don't believe comfort claims |
Suppose v2 comes back with a lower CTR than v1. Without column three the conclusion is "v2 was worse," which teaches nothing. With it: "narrowing to a situation shrank the audience faster than it raised relevance" — and that travels to every other appeal.
The expectation needs no number. "Saves should go up" is enough. What matters is writing it before the line runs. Written afterwards, every prediction is correct.
Step 4 — Give every creative an ID that survives the platform
One line becomes several creatives, uploaded into different platforms where they acquire different names. To trace a number back to a sentence you need an identifier you own, not one a platform generated.
The convention is small — appeal, copy version, channel, sequence — and the only rule is never changing it once assigned. Naming schemes and carrying an ID through UTMs are covered in tracking creatives by ID. The point here: without an ID, step 5 has nothing to attach to.
Step 5 — Close the loop with a verdict
The last place this breaks is that copy never ends. A line runs, the campaign stops, the line sits in the sheet. Nobody deletes it, nobody reuses it. A year later: 200 rows, no idea which are alive.
So every piece of copy eventually gets one of three marks:
- Stop. We don't run this again. One line saying why.
- Keep. Stays in rotation at current budget.
- Scale. Raise budget, extend to another channel, or derive new copy from it.
Always date the verdict. "Stopped" alone re-opens the argument in six months. "2026-03-14 — stopped. 0.4% CTR over three weeks; v3 on the same appeal did 1.1%" ends it permanently, including with the person who wasn't there.
Thresholds and how long to wait before judging are in the creative review workflow.
The weekly and monthly rhythm
None of this survives as a one-time setup. It survives on two cadences.
| Cadence | What you do | Realistic time |
|---|---|---|
| Weekly (Friday) | Log last week's numbers on live copy; mark the obvious stop / keep / scale calls | 30 min for 20–30 creatives |
| Monthly (last day) | Archive stopped copy, derive 2–3 new lines from anything marked scale, refresh the per-appeal summary | 1 hour |
Skip the weekly pass and verdicts pile up until the monthly session is too big to face, at which point it stops happening. Weekly handles only the easy calls. If something is ambiguous three weeks running, it isn't ambiguous — it's a stop.
The highest-value hour here is the monthly derivation step. Deriving new copy from an appeal that already won beats opening a new one on almost every measure, and it's the part teams skip in favor of starting fresh.
What this looks like in a tool
A spreadsheet gets you further than tool vendors admit. Appeals as rows, copy underneath, a verdict column and a date carries you through step 3.
It breaks at exactly one place: when per-channel variants and per-period performance both need to roll up to the appeal. Three primary lines with three channel versions each is nine rows; attach monthly numbers to each and no flat sheet totals by appeal. Build the pivot and the source sheet becomes something nobody wants to edit.
copy hound handles that one join. Appeals sit in a primary/derived tree, channel copy specs hang underneath with character-limit checking for Kakao Moment, Naver GFA and Meta, and creative IDs, dated verdicts and per-period numbers roll up to the appeal. If your spreadsheet works, keep it.
FAQ
If copy is filed under appeals, how do I look at it by campaign?
Make campaign a tag, not a folder. Appeal is the storage key, campaign the view filter. The other way round buries every line when its campaign ends.
What do I do with copy that doesn't clearly belong to any appeal?
Keep one "unsorted" bucket. Treat more than about ten unsorted lines as a signal that an appeal is missing — reviewing the bucket monthly usually reveals two or three clusters.
Isn't writing a version for every channel a lot of extra work?
You only write versions for channels you actually run. Two per primary line is typical. Prove the line on one placement first, then derive versions as you widen distribution.
At what point does a team need this?
Roughly when monthly creative volume passes 20, or when you've advertised the same product for more than two quarters. If either is true, someone has already asked "did we try this before?" and not gotten an answer.
Read next
How to build an appeal library (columns, codes and a template)
An appeal library turns a list of ad angles into something you can search, sort by result and hand to the next person. Here are the nine columns, a permanent ID scheme, and the spreadsheet import traps that quietly corrupt the parent column.
Ad copy character limits by channel — and how to write to them
A working reference for ad copy character limits across Meta, Google, TikTok, Kakao Moment and Naver GFA, with the caveat that every team should confirm them against the platform's current spec. Plus the part nobody documents: how to actually write a line that has to land in thirteen characters.
Somewhere to actually run this
copy hound builds your appeals up as assets, keeps an improvement trail through derived appeals, and rolls per-channel creative performance back up to the appeal. Runs in the browser — nothing to install.
Start free