Campaign map · instructions and context · 30 October 2026

How an offer becomes a campaign map: the market counted, every account classified, the public record mined for pain, and copy written for each situation.

This page is the method. The two maps linked below are the method applied twice, to two different offers, so the pattern is visible rather than described. Take all three, run the steps against the offer you are analyzing, and the output is a third map in the same shape.

6steps, run in order, each one feeding the next
2worked examples, both built from Form 5500 data
1spec at the end that any offer can be poured into

How to use this page

Three links. Open the two maps in other tabs and keep this one beside them. Each step below says what to do, why it exists, what it produces, and then shows how it was done on each map.

Both maps read top to bottom in the same order: what the page is for, the market counted, the market from first principles, the custom fields, pain ranked and measured, the sequence, the campaigns with their copy, the plan in numbers, what it costs, the twelve months, behind the page. That order is not decoration. It is the order the work has to be done in, because each section is computed from the one above it.

Why we build a map before we send anything

The problem a map solves

Cold outreach fails in a predictable way: a list is bought, one message is written for everyone on it, and volume is pushed until the domain burns. Replies are low because the message is true of nobody in particular. The map exists to make the opposite happen: every account is in exactly one campaign, every campaign has a reason to exist that is visible in the data, and the first line of every email says something about that specific account that the recipient knows to be true.

What a map is

A single page that holds the whole plan, with every number traceable to a public source or a script. Market size, the grid of who sits where, the fields we can merge into copy, the pain we can measure, the copy itself, the volume math, the cost, and the calendar. If a number on the page cannot be recomputed, it does not belong on the page.

What it is not

It is not a deck, not a persona document and not a list of guesses about what the buyer feels. Every claim about pain is either measured in a filing field or labeled as an assumption. The page distinguishes the two in writing so that nobody downstream mistakes a hunch for a fact.

Who reads it

The person approving spend (how many, what it costs, what it projects), the person writing the sequences (fields, variants, triggers), the person loading the sequencer (groups, cadence, caps) and the compliance reviewer (every line of copy, the footer, the banned words). One page serves all four, so nobody works from a stale copy.

Step 0

Understand the service and the industry before touching data

Everything downstream depends on two questions answered precisely: what does the offer actually do, mechanically, and who in the market has a reason to care this quarter rather than some day. Spend the first block of time here. The maps look like data projects; they are offer projects that use data.

What to do

  1. Write the mechanism in one paragraph that a skeptic would accept. Not the pitch. What changes, for whom, under what rules, and what has to be true for it to work. If the mechanism depends on a tax position, a regulation or a filing threshold, name it and cite it.
  2. Write the compliance lock. The sentences that can never appear in copy, the words that are banned, the claims that need a professional in the room first. Do this before copy exists so the copy is born inside the fence rather than edited into it.
  3. Name who is in the room when it closes. The owner, the CFO, the controller, the HR lead, the broker, the CPA, the actuary. Each one is a potential recipient and a potential blocker, and the copy for a blocker is not the copy for a buyer.
  4. Find the natural clock. Most offers have a date on which the buyer is already forced to think about the subject: a renewal, a plan year end, a filing deadline, a funding notice, a contract expiry. The campaign calendar is built around that clock, not around your sales targets.
  5. List the public records the market leaves behind. Regulatory filings, licensing databases, court records, permits, procurement notices, job postings. The one that names the buyer, the date and a size figure is the spine of the map.
  6. Read the industry's own material. Carrier renewal letters, trade association surveys, the regulator's guidance notes, the two or three studies the industry quotes to itself. The copy will borrow their vocabulary; it has to be correct.

What it produces

A short internal brief: mechanism, compliance lock, buyer and blockers, the clock, the public records, the industry vocabulary. On the Section 125 map that brief was a separate document written before any data was pulled and it is cited on the page as the source for the ICP and the compliance rules.

Example one, pension map

Mechanism. Advisory to employers that sponsor a defined benefit pension plan: funding, risk transfer, termination and PBGC premium exposure. Clock. The plan year end and the actuarial valuation that follows it; the PBGC premium filing. Public record. Form 5500 with Schedule SB (funding) and Schedule H (assets). In the room. CFO, plan committee, the actuary, the investment consultant. Vocabulary. Funded status, section 436 restrictions, variable rate premium, freeze year. The page's copy was reviewed against those terms specifically.

Example two, Section 125 map

Mechanism. A Section 125 cafeteria plan under which employees elect a fully insured supplemental health plan pre tax, which may lower the employer's taxable wage base and FICA share going forward. Compliance lock. No dollar savings figure until the IRS position is settled in writing, no "free", no guarantee, "recapture" never alone, CPA reviews first, existing plan and broker stay. Clock. The medical renewal date, which is on Schedule A. Public record. Form 5500 with welfare code 4A and Schedule A. In the room. Owner or CFO, HR, the broker of record, the CPA.

Step 1

Identify how many are in the market

The market is counted, not estimated. Start from the full public file, apply each filter one at a time, and write down the count after every filter so the funnel is auditable. A reader should be able to see exactly where a company fell out and why.

What to do

  1. Pull the raw file fresh. Do not reuse a file pulled for a different offer, even from the same source. The pension map and the Section 125 map both start from Form 5500, and they share almost no rows: one keeps pension codes, the other keeps welfare code 4A. A stale or borrowed file is the most common way a map goes wrong silently.
  2. Learn the file's own rules first. Who is required to file, who is exempt, what each code means. Two rules decided the shape of the Section 125 market before a single row was counted: cafeteria plans themselves never file (IRS Notice 2002-24), and small insured or unfunded welfare plans under 100 participants are exempt (29 CFR 2520.104-20). So the visible market starts at 100 participants, and the 133,388 US firms with 50 to 99 employees (Census SUSB 2022) are invisible on this record and need a different source.
  3. Filter one condition at a time and log the count: the right plan type, the right entity type, US only, not a final filing, one row per employer (dedupe on EIN, keep the largest plan), the size band, the exclusions the offer demands (union plans, government, the wrong funding type).
  4. Check a code against the instructions, not against intuition. On the first Section 125 run the entity code filter kept code 1, which the instructions define as multiemployer, and the universe came back as 1,523 union sponsors. Code 2 is single employer. The fix was one character; the lesson is to read the layout document before trusting a count.
  5. Record the denominators. Every percentage on the map names what it is a percentage of. "48% renew in Q4" is wrong if 64% of insured plans and 66% of all plans do; both were put on the page with their denominators.
  6. Put the funnel in a table on the page and keep the script that produced it beside the page.

What it produces

A universe file, one row per account, with a stable key (EIN, plan number), the filter log, and a funnel table on the page. Everything after this step reads from that one file.

Example one, pension map

Universe from Form 5500 pension filings: a master ranked list of 15,239 defined benefit sponsors, with 4,882 scored and enriched plans forming the working market on the page, grouped into five segments. Source: the QPS enrichment pipeline and the command center grid the map reads from.

Example two, Section 125 map
Filter, in orderCount
2024 Form 5500 filings, all226,436
Welfare code 4A (health)68,533
Single employer, US, not final, one per EIN58,448
Not collectively bargained57,569
Insured or mixed funding55,193
100 to 499 participants: the universe37,489
of which 100 to 24925,438

Source: DOL EFAST2 F_5500 2024 "Latest" file dated 25 September 2026, script tam.py. 8,298,957 participants across the universe.

Step 2

Classify every account: the grid

The grid is the heart of the map. Two axes, every account in exactly one cell, every cell assigned to a campaign. The axes are not chosen for neatness; they are the two things that most change what you would say to the account and when you would say it.

What to do

  1. Choose the timing axis. It comes from the clock found in Step 0: the quarter the renewal lands, the plan year end, the filing window. Accounts whose clock strikes soonest go first, which is why the first campaign on both maps is the nearest quarter.
  2. Choose the fit axis. The one or two attributes that change the message itself: size band, state tax regime, industry type, funding type, whether a consolidator broker sits between you and the buyer. On the Section 125 map, income tax state changes which paragraph the employee benefit gets, industry changes whether the retention line is used, and broker type changes who is written to at all.
  3. Write the assignment rule as code, not prose. Each account must land in one campaign by a rule a script can run. If an account could land in two, the rule is not finished. The Section 125 rule, in order: no medical contract on Schedule A, campaign C; renewal in Q1, Q2, Q3, campaigns A1, A2, A3; renewal in Q4, split by band, tax state and industry into B1 to B4.
  4. Count every cell and put the counts on the page with the campaign tag in each cell. The grid should answer "how many are in B2" without a query.
  5. Name the campaigns by what they are, not with marketing names: "Q1 renewals, insured" is better than a code name, and the code (A1) is only there for the sequencer.
  6. Write the exclusions into the grid as well. The bands and types left out, and why, in a table beside the grid. A reader should not have to guess why 500 plus is absent.

What it produces

A group column on the universe file, a grid on the page with a count and tag in every cell, and a campaign list with one line of definition each.

Example one, pension map

Five campaigns, taken from the command center grid that already classified the pension market by segment. The map inherits the grid rather than rebuilding it, and each campaign on the page carries its own copy set, sequence and count. The grid stays the single source; the map reads it back.

Example two, Section 125 map
CampaignDefinitionEmployers
A1Insured, renewal in Q12,478
A2Insured, renewal in Q24,218
A3Insured, renewal in Q33,329
B1Q4, 100 to 249, income tax state, target industry4,802
B2Q4, 250 to 499, income tax state, target industry2,084
B3Q4, income tax state, other industry7,746
B4Q4, no income tax state3,423
CNo medical contract on Schedule A (self funded)9,409

Source: script yoy.py, groups.json. Q4 holds 18,055 of 28,080 insured plans (64%) and 24,721 of 37,489 by plan year end (66%), which is why Q4 is split four ways and the other quarters are not.

Step 3

See what public information can enrich the ICP, before paying for anything

Enrichment has two tiers. The first is free: every field on the public record that can be merged into copy. The second costs credits: names, verified emails, LinkedIn profiles. The map lists the free tier completely, with coverage, before a single credit is considered, because the free tier is what makes the copy specific and the paid tier only makes it deliverable.

What to do

  1. Inventory every usable field on the record and any schedule that joins to it. For each: the source field name, what it means in plain words, the coverage (the share of the universe where it is populated), and how it appears in copy.
  2. Join the schedules. On Form 5500 the health plan's carrier, policy dates, covered lives, premium, commission and broker all live on Schedule A and its Part 1, joined on the filing's ACK_ID. The join is where most of the specificity comes from.
  3. Pull the prior year and diff it. Year over year change is the richest free signal there is: who changed carrier, who changed broker, whose headcount moved, who filed for the first time. None of it is on a single filing; all of it is in two.
  4. Publish the coverage honestly. A field at 13% coverage (premium on the Section 125 record) is a sentence that is dropped where missing, not a field the copy depends on. A field at 0% (first name) is stated as 0% and is the reason paid enrichment exists.
  5. Check a field's meaning, not just its presence. The "carrier" on the largest Schedule A contract is sometimes a voluntary benefits carrier, not the medical carrier. The page says so, and the copy drops the carrier line until the contract type is verified.
  6. Price the paid tier per account and per group with the credit schedule written out, so the decision to enrich is a number: how many rows, at what cost per row, for which group first. On the Section 125 map that is an editable calculator on the page. Spend nothing until the list is final and the group is chosen; the ranking in Step 4 tells you which rows deserve the first credits.
  7. Write every merge field down with its fallback. If {{firstName}} is missing, what goes in its place. If {{brokerCommission}} is missing, the sentence is dropped. The fields table on the map is the contract between the data and the copy.

What it produces

The custom fields table (field, source, coverage, use in copy, fallback), a universe file enriched with the free tier, and a cost calculator with the paid tier priced per row.

Example one, pension map

Free tier from the pension filing: plan size, funded status and liability figures, plan year end, actuary and the freeze year where present. Paid tier: the enrichment pipeline that found the CFO or plan contact per sponsor, which is what the 4,882 scored plans carry. Links on the pension map use one UTM scheme so replies read back into the command center.

Example two, Section 125 map
FieldCoverageUse
Participants (headcount)100%Sizing sentence, rounded to ten
Industry from NAICS99.9%Variant choice, retention line
Broker of record97.6%"Your broker stays", broker track routing
Headcount change vs 202390.4%Trigger first line
Policy end date (renewal)74.8%Campaign assignment, subject line
Broker commission64%One sentence in CFO email 2, dropped if missing
Filing signer name45.6%Fallback for first name
Premium13%Not relied on
First name, verified email0%Paid tier, priced on the page

Source: join.py and yoy.py over the 2023 and 2024 files. Paid tier priced at the vendor's published credit schedule; no credits were spent at the analysis stage.

Step 4

Identify the pain points and the problems, then measure them

There are two kinds of pain on a map: pain you can see in a field, and pain you believe is there. Both belong on the page, but they are labeled differently and used differently. Measured pain becomes a trigger line and a score. Believed pain becomes a paragraph in the body and a hypothesis to test by reply rate.

What to do

  1. List the pains the offer brief claims, in the brief's own ranking, and set them beside the record. For each one ask: which field, or which year over year change, would show this pain if it were real?
  2. Define each flag as a rule with a threshold: headcount down 10% or more, headcount up 15% or more, carrier changed, broker changed, first year filing, waiver rate 25% or more. Thresholds are written down so they can be argued about and changed.
  3. Measure the share of the market carrying each flag. That share is also the first honest test of the brief: if the brief says everyone is in pain and the data says 15% changed carrier, the campaign is built on the 15%, and the page says so.
  4. Build a score that adds the flags with weights, adds fit (band, state, industry) and subtracts obstacles (a consolidator broker in the way). Keep it additive and documented in a table so anyone can recompute a row by hand. The score orders the group; it does not replace the group.
  5. Rank each campaign by score and count the bands (70 plus, 50 to 69, 30 to 49, under 30). The top band is who gets enriched first and written to first.
  6. Separate the audience from the pain. A broker of record is not in pain; a broker is in the way, or is a channel. The map routes the 988 A1 accounts behind consolidator brokers to a broker track with its own copy rather than pretending the owner will act around their broker.
  7. Keep the assumptions visible. Pains that could not be measured (margin pressure, turnover cost, owner fatigue with benefits) are listed under "assumed" with the reply rate that would confirm or kill them.

What it produces

A flag table with shares, a score table with weights, a score column on the universe file, score bands per campaign, and the audience split into buyer, blocker and channel.

Example one, pension map

Measured pain on the pension record: funded status below the thresholds that trigger section 436 restrictions, the PBGC variable rate premium exposure that a liability figure implies, and a plan frozen in a known year. Each is a field or a derivation from one, and each became a campaign angle with the source labeled, after a copy review corrected how PBGC, section 436 and the freeze year were stated.

Example two, Section 125 map
Flag, measured on 33,906 matched employersShareScore
Broker of record changed24.9%15
Headcount down 10% or more18.3%15
Headcount up 15% or more17.0%15
Carrier changed14.9%20
Waiver rate 25% or more (all rows)15.7%10
First year on Form 5500 (all rows)9.6%10
Fit: income tax state, target industry, 100 to 249, Sch A medical10, 10, 5, 5
Obstacle: consolidator broker41.2%minus 10

A1 result: 2,478 employers, 1,757 carrying at least one flag that scores, 64 at 70 plus, 379 at 50 to 69. Source: yoy.py, s125-universe-scored-yoy-stats.json.

Step 5

Design the copy for every pain, problem and situation

Copy is the last step, not the first, because by now the writer knows exactly who is being written to, what is known about them, what date they are already thinking about, and what cannot be said. The copy is a matrix: a variant for each fit segment, a trigger line for each measured flag, and a track for each audience that is not the buyer.

What to do

  1. Fix the sequence before the words. Both maps use three emails over fifteen days (day 1, day 5, day 8) with LinkedIn alongside (connect day 2, follow up day 6, breakup day 10), never the same email twice to the same person, and a cap on touches per channel per quarter. The sequence is the same for every campaign so that only the words change.
  2. Write the base variant for the largest segment in full: three subjects per email, body, call to action, sign off, footer. Everything else is a diff against it.
  3. Write each other variant as a diff: "replace the employee paragraph with", "drop the sentence beginning". Diffs are reviewable; four full rewrites are not. On the Section 125 map V2 (salaried industries) and V3 (no income tax states) are three and two changes against V1.
  4. Write one trigger first line per measured flag, ordered by priority, and prepend the highest priority one that is true of the row. The first line is the only place the account sees that this email was written for it, so it carries the measured fact and nothing else.
  5. Write the track for the blocker or channel. The broker track on the Section 125 map writes to the producer, not the employer, offers them the illustration, and lets them say no. If they go silent for 60 days the account re enters the buyer track with an opener that says so.
  6. Write the re entry for 60 days after breakup with a different opening angle, capped at three cycles per account, so no account is written to forever.
  7. Run the compliance lock over every line before the page is published: banned words, dollar figures, guarantees, the footer on every email. On the Section 125 map that is a zero count check on the copy file.
  8. Put the full copy on the map, campaign by campaign, with the merge fields visible, so the sequencer load is a copy and paste from the page and the reviewer sees exactly what will be sent.

What it produces

A copy file per campaign group with the segment to variant map, trigger lines, the base variant, the diffs, the blocker track, the re entry and the footer; the same copy rendered on the map under each campaign.

Example one, pension map

Five copy sets, one per segment, email and InMail, in the cold copy voice the practice settled on: demand, do not sell; no softeners; the first line names a fact from the plan's own filing; no breakup theatrics. Reviewed against the founder's transcripts so the vocabulary is the one the buyer uses.

Example two, Section 125 map

Four variants, seven trigger lines, a broker track, a re entry and a footer, for 2,478 A1 employers. Source: S125-A1-Copy.md and the campaigns section of the map.

Step 6

Put the plan in numbers: volume, cost, calendar

With the groups counted and the copy written, the plan is arithmetic. The map carries it as editable calculators so the person approving spend can change a rate and see the result rather than ask for a new deck.

  1. Volume to outcome. Daily sends, delivered rate, reply rate, positive reply share, meeting rate, close rate, each editable, projecting replies, meetings and signed accounts per group. Every default rate is labeled as an assumption until the campaign has its own data.
  2. Cost per group. Rows to enrich, credits per row, the credit schedule, inbox count and cost, sequencer seats. Cost per meeting falls out of the two tables together.
  3. The twelve months. A Gantt row per campaign, placed by the clock from Step 0: the nearest renewal quarter first, the Q4 block split into its four campaigns, the self funded group last because its copy is different and its pain is less measured.
  4. Behind the page. A claims register (every number, where it came from, the script that made it) and a sources list. This is what makes the page auditable a month later by someone who was not there.
Example one, pension map

Volume, replies, meetings and signed engagements with editable rates; the year worked pass by pass; twelve month Gantt; launch milestones; a meetings panel for the next seven days read from the live system; the numbers and plan behind the campaigns.

Example two, Section 125 map

Volume, replies, meetings and signed employers with editable rates; what it costs to reach them with the credit schedule editable; the next twelve months campaign by campaign; behind the page with the claims register and the DOL file dates.

Build your own: the checklist

Run these in order against the offer you are analyzing. Each line is done when the artifact beside it exists. Skip none; a map with a step missing is the thing that fails quietly.

Done whenArtifact
0.1The mechanism is written in one paragraph a skeptic accepts, with the rule or statute citedInternal brief
0.2The compliance lock exists: banned words, banned claims, who must review firstInternal brief
0.3Buyer, blockers and channels are named; the clock is namedInternal brief
0.4The public record that names buyer, date and size is identified, and its filing rules are readInternal brief, source list
1.1The raw file is pulled fresh for this offer, with the file date recordedRaw data folder
1.2Filters applied one at a time with a count after each; codes checked against the layout documentFunnel table, tam script
1.3One row per account with a stable key; exclusions listed with reasonsUniverse file
2.1Timing axis and fit axis chosen and justified in a sentence eachGrid section
2.2Assignment rule written as code; every account in exactly one campaigngroup column, groups file
2.3Grid on the page with a count and tag in every cellGrid section
3.1Every usable field inventoried with coverage and use in copyCustom fields table
3.2Schedules joined; prior year pulled and diffedjoin and yoy scripts
3.3Paid tier priced per row and per group; zero spend until the group is chosenCost calculator
4.1Each claimed pain mapped to a field or marked assumedPain section
4.2Flags defined with thresholds; share of market measured for eachFlag table
4.3Additive score documented; campaigns ranked; score bands countedScore table, ranked file
5.1Sequence fixed: days, channels, capsSequence section
5.2Base variant in full; other variants as diffs; one trigger line per flagCopy file
5.3Blocker or channel track; re entry; footer; compliance scan at zeroCopy file
6.1Volume and cost calculators with every rate editable and labeledPlan and cost sections
6.2Twelve month Gantt placed by the clockCalendar section
6.3Claims register and sources; page hosted; every number recomputableBehind the page
Two rules that both maps obey and that are easy to break. First: nothing is sent, loaded or paid for at the analysis stage. The map is finished when it is hosted and audited, and the spend decision is a separate yes. Second: never let two offers share a data file, a page or a script by editing one into the other. The Section 125 map was built beside the pension map without touching it.

The spec: what to hand over to generate a new map

Fill this in for the offer you are analyzing and give it, with the two example maps, to whoever or whatever is building the page. It is the complete input. Everything on a map is derived from these fields plus the data pull they point to.

OFFER
  Name:
  Mechanism (one paragraph, skeptic proof, rule or statute cited):
  Compliance lock (banned words, banned claims, who reviews first):
  Buyer (title):            Blockers:            Channels:
  The clock (the date the buyer is already thinking about the subject):

MARKET
  Public record that names buyer, date and size:
  Its filing rules (who must file, who is exempt, thresholds):
  Filters in order, with the field and code for each:
  Exclusions and why:
  Size bands in scope:

GRID
  Timing axis (field, how it is bucketed):
  Fit axis (one or two fields, how they split the message):
  Assignment rule (in order, each account to one campaign):
  Campaign names and one line definitions:

FIELDS
  For each merge field: source field, meaning, coverage, use in copy, fallback
  Joins needed (schedule, key):
  Prior period to diff against:
  Paid tier: what is bought, credit schedule, which group first

PAIN
  Pains the offer brief claims, in its ranking:
  For each: the field or diff that would show it, or "assumed"
  Flags with thresholds:
  Score weights (flags, fit, obstacles):

COPY
  Sequence (days, channels, caps):
  Segments to variants:
  Trigger lines, one per flag, in priority order:
  Blocker or channel track:
  Re entry angle and cycle cap:
  Footer:

PLAN
  Default rates (delivered, reply, positive, meeting, close) and their source:
  Inbox and sequencer costs:
  Calendar by campaign:
  Sources and scripts to list behind the page:
The output of the spec is a page in the same order as the two examples: what the page is for, the market counted, the market from first principles, the custom fields, pain ranked and measured, the sequence, the campaigns with copy, the plan in numbers, what it costs, the twelve months, behind the page. If the new page cannot fill a section, the spec is missing a field, and the gap is the finding.

Behind the page

Sources for the examples

ClaimSource
Section 125 funnel, groups, flags, coverage, scoresDOL EFAST2 F_5500, F_SCH_A, F_SCH_A_PART1, 2023 and 2024 "Latest" files dated 25 September 2026; scripts tam.py, join.py, yoy.py
Cafeteria plans do not fileIRS Notice 2002-24
Small welfare plan exemption under 10029 CFR 2520.104-20
Firms by sizeCensus SUSB 2022
Section 125 mechanism and compliance lockInternal offer brief, 27 October 2026
Pension map structure, five segments, copy voiceqps-campaign-map.pages.dev and the command center grid it reads

What this page is and is not

It is the process description for building a campaign map, with the two existing maps as its worked examples. It is not a claim about the Section 125 offer's tax outcome, which stays subject to the compliance lock, and it is not a change to either example map. Both are linked as they stand on 30 October 2026.

Reading order for a new offer

This page once, top to bottom. Then the pension map for the shape and the voice. Then the Section 125 map for the data method, because its scripts and funnel are the most recent and the most fully documented. Then the spec above, filled in.