Aha StudioAI workers
Guides

Bulk Campaigns

BETA

Up to 100 listicles from one topic or your own list of searches, each on its own angle, written with real sources and published in rotation across your own sites and cloud accounts.

7 min read13 stepsUpdated October 27, 2026

Before you start

  • A topic or your searchesA topic, for example "AI SEO", or a list of the searches you want, one per line (each one becomes a listicle).
  • Somewhere to publishAt least one connection under Your account, Publishing: Netlify, GitHub Pages, Cloudflare Pages, cloud storage (Amazon S3, Google Cloud Storage, Cloudflare R2, Backblaze, Wasabi, DigitalOcean Spaces, Azure) or a WordPress site. Add several to rotate between them.
  • Your Aha Studio accountMembers run 10 campaigns and 300 listicles a month. Unlimited with your own AI key and DataForSEO login after your first 14 days.
  • Your own OpenAI key (for images)Images and infographics are made on your own OpenAI key, under Keys and connections. Without one the listicles are written and published without images.
Every listicle is a full SEO Magnets article: real search results read, a plan that beats them, real statistics with their sources when you leave Find real statistics on, and the house checks. A big campaign uses more than the included monthly AI, so it carries on on your own AI key.
PART 01

Plan a campaign

0 of 6 done
  1. Open Bulk CampaignsAt bulkcampaigns.ahastudio.net, or press Start something new on your account page and choose Bulk campaign.
  2. Type the topic or paste your searchesTopic plans the angles for you from real searches around it. My own searches takes your list, one listicle per line, up to 100.
  3. Choose how many and how longHow many listicles (3 to 100) and Size: Standard (10 to 15 items each) or Really long (20 to 100 items each).
  4. Add the extrasWho reads them, Rules for the campaign, your Call to action link (each page words its box its own way), Find real statistics, Images and Infographic with embed code (both on your own OpenAI key).
  5. Add your material (optional)A Google Doc link (Share, Anyone with the link) or pasted text: transcripts, notes or interviews. Split it into parts with a line of ====== or a horizontal line. Each listicle gets the parts that fit it.
  6. Press Plan the campaignThree steps tick off: the research, your material, then the angle plan in batches. Nothing is written yet.
PART 02

Check the plan and approve it

0 of 7 done
  1. Check every listicleEach row shows the title, the search it targets, its intent, its angle and the monthly searches when search data has them. A row marked Competes with would fight another for the same search: edit it, plan a different one, or remove it.
  2. Edit, remove or plan againEdit changes the title, the search or the angle. Plan a different one asks for a new angle. Remove leaves it out (Restore brings it back).
  3. Choose where they goTick your destinations and put them in order. One to each in turn rotates page by page; In blocks fills each destination in turn. The plan shows where every page will go. WordPress pages go in as drafts unless you choose Publish live.
  4. Choose one site or a site eachA ticked Netlify, GitHub Pages or Cloudflare Pages row has a switch. A new site for each (the default) makes every listicle its own one-page site. All on one site puts every listicle that goes there on one site: a home page that lists them all, each listicle at its own address on it (for example /best-ai-seo-tools/), a link back home and More from this site on every page. Send ten listicles to one Netlify account with All on one site and you get one site with ten listicles. WordPress rows say All on your one site (the site you connected) and storage rows say Each in its own folder of this bucket.
  5. Choose how they go liveAs each one is written, A few a day (you set how many), or When I press Publish.
  6. Tick the ones to write nowEvery listicle has a tick, all ticked to start with. To test first, press Clear all and tick one or two (Select all ticks them all again). Only the ticked ones are written; the rest are Kept for later and keep their place in the rotation.
  7. Set a spend cap (optional) and press Approve and startThe button shows how many are ticked. The listicles are written two at a time by the server, so you can close the page. Each one goes to its destination as you chose.
PART 03

While it runs

The progressWritten, live and failed counts, and every row with its state: waiting, writing (with the step it is on), written, live with its address, or failed with the reason.
Pause, Resume, StopPause stops new pages starting. Resume goes on (with a new spend cap if you set one). Stop drops the pages not started yet and finishes the rest.
Publish nowIn When I press Publish mode, Publish all written sends them all, or Publish on a row sends just that one.
Kept for laterThe ones you left unticked wait under Kept for later. Tick the ones you want and press Write the ticked ones: they are written and go live as you chose. They count toward your monthly listicles only once they are written. Remove drops one, and Stop leaves them as they are.
A page failedThe reason is on its row. Retry writes it again, or tries the publish again when it was written.
The CSVDownload CSV saves every listicle with its search, destination, status and live address: for indexing, backlinks or your records. Site address is the home page of the one site a listicle is on, for destinations set to All on one site.
Each pageIts own one-page site, a page on the campaign's one site, or a WordPress post: the contents sidebar, Share this and Summarize with AI buttons, the images, and an infographic with code other sites can copy to show it with a link back to you.
The one site's addressFor a destination set to All on one site, the line under the progress buttons reads, for example, "Netlify: Main (All on one site): ai-seo-3f2a.netlify.app" with Open. It shows once the first listicle is live there. The site is named after your topic (a site, repository or project you already have is never used), and every listicle that goes there later, the ones you write days later with Write the ticked ones included, joins the same site and its home page.
PART 04

Rotation and keeping it safe

Sites, not just free accountsRotate across sites, buckets and domains. One account can hold many sites. Some hosts allow one free account per person (GitHub does), and an account that breaks their terms can lose every site on it.
Different angles on one accountThe plan gives every listicle its own search and angle, and marks any two that would compete, so several can sit on one account without fighting each other.
Names never clashA repository, Pages project or folder you already have is never written over: the next free name is used.
Drip itFor big campaigns, A few a day looks natural and helps indexing.
PART 05

Your limits

Starter allowance1campaign and 10 listicles in your first 14 days
Each month10campaigns and 300 listicles. Unlimited with your own AI key and DataForSEO login after your first 14 days.
One campaign3 to 100listicles, written 2 at a time, up to 30 destinations
AI and search datameteredthe research, the plan and every listicle count toward your monthly amount, then your own keys
PART 06

If something looks wrong

Still stuck? Email support@anthonyhayes.me or open the help desk.
Ready to build?Type the topic, choose how many and press Plan the campaign. You approve the plan before anything is written.Open Bulk Campaigns