Bulk Loader
A hundred campaigns,
one screen.
A spreadsheet that launches. Rows from templates, every cell editable in place, and keywords that split themselves into campaigns.
| Campaign name | Budget | Keywords | Creatives | Ready | |
|---|---|---|---|---|---|
| US_AutoIns_QuotesUS_AutoIns_RSA | $400.00 | car insurance quotescheap car insurance+3⚡ 1–5 campaigns | ⚡ 5T⚡ 5D3C⚡ 2img | ready | |
| US_AutoIns_Over50US_AutoIns_RSA | $250.00 | insurance for drivers over 50+2⚡ 1–3 campaigns | ⚡ 5T⚡ 4D0C⚡ 2img | ready | |
| CA_Solar_RebateCA_Solar_Native | $180.00 | solar rebate 2026solar grants⚡ 1–2 campaigns | 3T3D0C⚡ 4img | ready | |
| UK_Debt_ConsolidateUK_Debt_Taboola | Set budget | debt consolidation uk+1⚡ 1–2 campaigns | ⚡ 5T⚡ 5D0C⚡ 2img | No budget +1 | |
| Name this campaignUS_Refi_Bing | $320.00 | Needs keywords | ⚡ 5T⚡ 4D0C⚡ 2img | No campaign name +1 | |
| AU_Insurance_RSOCAU_Ins_RSOC | $140.00 | car insurance australia+4⚡ 1–5 campaigns | ⚡ 5T⚡ 5D⚡ 3C⚡ 2img | ready |
Every cell opens its own editor anchored to the cell — the targeting facets, the keyword list, the article picker. Nothing sends you to a form and back.
The template stays on the sub-line after you rename the row, so a row never loses track of where it came from.
Ready names the first reason inline and counts the rest. A number alone won’t tell you whether it’s one field or five.
You don’t pickthe number.
the keywords do
BP7_US_AutoIns_Quotes
✓ created
BP7_US_AutoIns_Over50
✓ created
BP7_US_AutoIns_Coverage
✓ created
BP7_US_AutoIns_Switch
✓ created
BP7_US_AutoIns_Discounts
✓ created
BP7_US_AutoIns_NewDrivers
✓ created
18
keywords on one row
split by topic ⚡ 1–18 campaigns
Categorisation runs server-side, at create time. Until it answers, the count is honestly a range — which is why the rail says 1–18 rather than inventing a figure.
Eighteen keywords became six campaigns, not eighteen. Each topic group gets its own, named from the group.
One toggle in the cell keeps them together instead: 1 campaign, all keywords running in it.
Generate some.Write the rest.
per field · per row
| Campaign name | Budget | Keywords | Creatives | Ready | |
|---|---|---|---|---|---|
| US_AutoIns_QuotesUS_AutoIns_RSA | $400.00 | car insurance quotescheap car insurance+3⚡ 1–5 campaigns | ⚡ 5T⚡ 5D3C⚡ 2img | ready | |
| US_AutoIns_Over50US_AutoIns_RSA | $250.00 | insurance for drivers over 50+2⚡ 1–3 campaigns | ⚡ 5T⚡ 4D0C⚡ 2img | ready | |
| CA_Solar_RebateCA_Solar_Native | $180.00 | solar rebate 2026solar grants⚡ 1–2 campaigns | 3T3D0C⚡ 4img | ready | |
| UK_Debt_ConsolidateUK_Debt_Taboola | Set budget | debt consolidation uk+1⚡ 1–2 campaigns | ⚡ 5T⚡ 5D0C⚡ 2img | No budget +1 | |
| Name this campaignUS_Refi_Bing | $320.00 | Needs keywords | ⚡ 5T⚡ 4D0C⚡ 2img | No campaign name +1 | |
| AU_Insurance_RSOCAU_Ins_RSOC | $140.00 | car insurance australia+4⚡ 1–5 campaigns | ⚡ 5T⚡ 5D⚡ 3C⚡ 2img | ready |
The bolt means AI generates it, seeded from that row’s own keywords. Five titles, five descriptions, two images — a count, not a promise.
Plain pills are yours — typed by hand and left exactly alone. Each of the four types picks its own mode independently.
Zero is red in either mode. A field set to generate nothing holds nothing, and the row would launch with an empty slot.
Change twelve rowsthe way you’d change one.
set a value to change it
| Campaign name | Budget | Keywords | Creatives | Ready | |
|---|---|---|---|---|---|
| US_AutoIns_QuotesUS_AutoIns_RSA | $400.00 | car insurance quotescheap car insurance+3⚡ 1–5 campaigns | ⚡ 5T⚡ 5D3C⚡ 2img | ready | |
| US_AutoIns_Over50US_AutoIns_RSA | $250.00 | insurance for drivers over 50+2⚡ 1–3 campaigns | ⚡ 5T⚡ 4D0C⚡ 2img | ready | |
| CA_Solar_RebateCA_Solar_Native | $180.00 | solar rebate 2026solar grants⚡ 1–2 campaigns | 3T3D0C⚡ 4img | ready | |
| UK_Debt_ConsolidateUK_Debt_Taboola | Set budget | debt consolidation uk+1⚡ 1–2 campaigns | ⚡ 5T⚡ 5D0C⚡ 2img | No budget +1 | |
| Name this campaignUS_Refi_Bing | $320.00 | Needs keywords | ⚡ 5T⚡ 4D0C⚡ 2img | No campaign name +1 | |
| AU_Insurance_RSOCAU_Ins_RSOC | $140.00 | car insurance australia+4⚡ 1–5 campaigns | ⚡ 5T⚡ 5D⚡ 3C⚡ 2img | ready |
Edit 12 rows
set a value to change it
The dot is an indicator, not a control. Typing a value is what arms the field — there is nothing to tick first.
Emptying a field is its own instruction, because a blank control can’t say the difference between “leave this” and “clear this”.
Some fields need agreement across the selection. Sites stays shut until the rows share one monetization, and says so where the value would be.
Press here.Results appear here.
one strip, three faces
The prerequisite sits with the button it blocks — group and prefix, set once per session and stamped on every row.
Every row goes or none does. A partial launch left blocked rows behind quietly, so the table and the batch disagreed about what had been sent.
A row that fanned out counts up rather than repeating its line: four rows in the feed, fifteen campaigns between them.
Underneath
The parts you only notice when they’re missing
It survives you
Close the tab. Come back.
The batch lives in your browser between sessions, so a half-built set of forty rows is still there tomorrow. Undo goes back fifty steps.
All or nothing
Every row goes, or none does
A blocked row stops the batch and stays a draft, rather than being left behind quietly while the rest launch.
It admits when it’s lost
Eleven minutes, then it says so
A row still marked creating after the job’s own timeout reads no response yet — check History rather than spinning forever.
Before it fires
What stops a row, in its own words
The readiness check is deliberately small and blunt. These are the actual messages a row shows when it isn’t going anywhere — the first inline in the Ready cell, the rest on hover.
Get started
Bring one keyword list.
Leave with a batch.
Book a 20-minute working demo — we’ll build rows from your template, fire them, and watch the creation events come back on the call.
No credit card. No migration project.