Test Facebook ads on 120 simulated buyers before spending, then check against real results
A small exam-prep client's real ad results were hidden from a synthetic-buyer tool. It ranked the ads almost backwards on clicks, but correctly flagged trust and privacy as the reason few visitors signed up.
Evidence: The source shows its work: steps, screenshots, code or data you can inspect.
The business problem
Small advertisers want to know which ad and audience will work, and why visitors do not convert, before spending more. Synthetic or simulated customer panels promise answers cheaply, but founders rarely know whether to trust them.
What was tried
1. Take ads that have already run with real spend (here 8 Facebook ads for a free mock exam, run in five South Asian and Southeast Asian countries) and keep their real results aside. 2. Build simulated audiences: 8 audiences of 15 synthetic students and parents each, every persona with a short life interview. 3. Show the ads to these personas in simulated feeds three times with different random seeds, and record which ads they would click. 4. Survey the personas about the sign-up offer to collect objections. 5. Compare the simulated click ranking with the real one, and the stated objections with the real funnel. 6. Use what matched (here, objections about trust and the long sign-up form) to design the next small real test, such as a short quiz with no personal data up front or a three-field privacy-first page. The author ran this with MarketMirror, an open-source tool they built that runs from an AI coding agent such as Claude Code, Codex, Cursor or Gemini.
What was reported (mixed)
Mixed. Real data: $56.05 spend, 274,557 impressions, 4,466 clicks, 1,500 landing page views and 16 sign-ups (about 1 in 100). The simulated click ranking was close to the reverse of the real one (rank correlation -0.84): it favoured a broad Nepal audience while the real winner was an Indonesian parents ad at 2.32% click-through. The simulated survey did point to the real problem: 56% named trust and 28% named privacy as the main blocker, consistent with a form asking for name, email, phone, country and password for a free test. The suggested fixes were not yet tested.
Limitations
Small sample (8 ads, $56 of spend, 16 sign-ups). The author built the open-source tool being tested, so the post also promotes it, though it is not sold on the page. The AI models behind the personas are not named. The proposed fixes are untested ideas. The author says the post was written with AI help and the numbers checked against saved data. Simulated buyers are not real customers: the author's own conclusion is not to use simulation to rank ads by click-through until it has been backtested on your own past ads.
What you need
Past ads with real spend and results to backtest against; an AI coding agent that can run the open-source tool.
Sources
- DEV Community (Ayush Niroula) ↗ Firsthand write-up, published October 25, 2026
Source published: October 25, 2026. Last reviewed here: October 28, 2026. Spot a mistake? Tell us.
Tools in this workflow
- Claude Code: One of the agents named as able to run the simulation toolTry Claude Code
- Facebook Ads: Where the real ads ranTry Facebook Ads
Get new workflows like this by email
A short selection of the most useful new workflows, including the ones that did not work. Free, and you can unsubscribe at any time.
Related workflows
A Claude-built support inbox that drafts replies, pulls orders and learns from the owner's edits
A small online seller had Claude build Relay, an internal web app that turns email, Facebook and Instagram messages into tickets every 10 minutes, drafts replies with order data, and handles cancellations and returns after his approval.
Localize an iOS app with code-aware CLI agents, .xcstrings and separate App Store copy files
An iOS developer describes using Claude Code to find missing strings and Codex CLI to translate .xcstrings, store metadata and screenshot text. App Store entry and screenshot layout remain manual.
Write AI test specifications before implementation, or hide the function body from a fresh test-writing chat
A small-SaaS developer reports a double-refund bug despite passing AI-generated tests. Their revised Claude Code routine separates test specifications from implementation and uses a fresh chat for diff review.
Automate monthly refreshes of data-driven articles with an agent that fetches, filters, rebuilds and drafts for human review
An Ahrefs marketer describes a monthly pipeline that pulls fresh keyword data, filters it with written rules and examples, rebuilds tables, updates WordPress drafts and notifies the editor, who approves every change before it goes live.