See the Meta ads a competitor is running, no key needed: paste their page and get the measured structure of up to 3 live ads for $0.01. Add your own Anthropic key to analyse up to 20 for hook, offer, CTA and pacing, from $0.02 an ad. You pay Anthropic directly for the model.
The page now opens with what this Actor takes, what it returns and what it costs, with a working example input you can copy. It used to open by repeating its own title back to you.
The price is on the page, not only on the Pricing tab.
0.2 - 2026-09-13
Media links in the 100.64.x.x range are now refused, like other private and internal
addresses. It is a shared address range used inside some networks, and it was not on the refused
list before. Links must still be https.
README, Security: says what the check refuses, and the one case it cannot see: a host that
gives a public address when checked and a private one when the download connects (DNS
rebinding).
Nothing else changes: the same inputs, the same output fields, the same prices.
0.1, platform build 0.1.5 - 2026-09-11 (run 18)
README, Pricing: a keyless preview is no longer described as never charged. The "Never
charged" list now ends "and any per-ad event or brief in a keyless preview", followed by: a
keyless preview run costs one $0.01 start event, plus the ads scraper's own fetch of up to 10 ads,
billed to your Apify account. The start event has no preview branch (src/main.py:548-558) and
tests/test_charging.py:322 pins it.
README: "Try it free first" reads "Try it with no key first", and step 2 of the 60-second start
says "the no-key preview" where it said "the free preview".
0.1, platform build 0.1.5 - 2026-09-11 (run 17)
README: the keyless split is in the opening paragraph. The first sentences now say what a
run with no key returns (the real ads, measured structure for up to 3, no AI called) and that
the teardown and the brief need an Anthropic key. It used to arrive one paragraph later. The
"Try it free first" block is unchanged.
README: the SoFi screenshot caption says the run had a key. "Real output, unedited" was true
and incomplete: every model field in it needs a key.
0.1, platform build 0.1.5 - 2026-09-11 (run 16)
.actor/actor.json now carries the live title and description (read from the Actor's own
record and the Store search index on 2026-09-11, identical on both). It still carried the
pre-2026-09-11 text ("torn down", "synthesis brief", "AI teardown"), which a future push could
have shipped back over the live copy. checks/check_vocab.py now reads every actor.json, so
that text would fire.
0.1 - 2026-08-18
Initial build, per the Gate 1 approved plan (design doc 2026-08-17, revision 2 of 2026-08-18).
One-step input: page URL / Ad Library URL / advertiser name; runs apify/facebook-ads-scraper
as a sub-run billed natively to the buyer, explicit resultsLimit always set, wait-capped with
partial-dataset handling. datasetId chaining (accepts run IDs) and direct mediaUrls kept.
Meta ads dataset adapter: nested snapshot walk (videos, images, cards, extras), video-wins,
carousel first card as carousel-card, summary rows skipped, unclassifiable rows carry the
snapshot keys seen (shape-drift diagnosability), whitelisted sanitized metadata passthrough.
Identity and dedupe on adArchiveID (signed URLs are unstable); duplicates analyzed once,
charged once, reference rows pushed.
Image branch: hardened download with an image Accept header, magic-byte media_type sniffing
(WebP under jpg URLs is real), ffprobe dimension gate, reject-only oversizes.
Ad taxonomy teardown (hook, offer framing, CTA placement, production style, on-screen text,
adScore, whyItWorks) with the inherited parse discipline: enums pinned, free text sanitized
and capped, measured fields never model-overwritten. vision-parse-failed records are NOT
charged.
Synthesis brief: one text pass over capped excerpts, 5-creative / 30 percent evidence gate,
429 halve-and-retry, link-stripped outputs, charged only when produced, budget-reserved.
Charging: four events (start $0.01, video $0.04, image $0.02, brief $0.15); joint row-order
admission gate from SDK headroom (no price literals) with an overflow tail re-admitted as
failures free budget; restart readback paginated to exhaustion and keyed on delivered
creative rows only; unpriced-actor degrade inherited.
Keyless preview: fetches real ads, measures structure for 3, hard-clamps the upstream fetch,
charges nothing per creative, and the summary carries the exact paid-run upgrade input.
Run summary row on every run: analyzed/failed/duplicate/unclassifiable counts, charge
counts, upstream run report, page confirmation for advertiserName guesses.
Drift test extended 3-way at the repo root; download Accept header parameterized across all
three actors in one commit.