Claude Competitor Ad Research: Source-Linked CSV Files

- Claude can't research a competitor's ads until it has the ads. On its own it said it couldn't open Meta's Ad Library and wouldn't make up copy or links.
- Check whose page each ad ran from before you compare. The request returned 30 ads under the HelloFresh name, and only 16 showed HelloFresh's own US page.
- Get transcripts for video ads. The two transcripts said "There's no commitment and I can skip a delivery anytime," which those ads' written copy never did.
- Ask for a quote, its source field and a link with every observation. That's what lets you check Claude's reading against the ad.
Built on AnyAPI
411 scraping and data APIs behind one key.
Every endpoint in this post is one call away. Pay per request in USD from a prepaid wallet, with automatic failover when a provider breaks. No subscription, no card to start.
Get ~150 free requests$0.10 of credit on signup.Claude can compare a competitor's ads for you. The hard part is getting it the ads. When we asked it for a spreadsheet of HelloFresh's current Facebook and Instagram ads, it said it couldn't open Meta's Ad Library and wouldn't make up copy or links to fill the gap. So instead of a spreadsheet, we got a list of ways to collect the ads ourselves.

With AnyAPI connected, the same request pulled 16 real ads from HelloFresh's US page, plus transcripts of two of its video ads. Claude turned them into a spreadsheet and a short note, and every point in the note quotes the ad and links to it in the Ad Library, so you can check it yourself.
Written copy and spoken words are separate evidence. A video ad's headline doesn't tell you what someone says on camera. In the HelloFresh ads below, the two transcripts made a claim the written copy never did.
Everything below comes from one real chat. The prompts are copied word for word, and the two files at the end are the ones Claude made.
At a glance
| Question | What the run showed |
|---|---|
| Can Claude pull a competitor's ads on its own? | No. Without a connector it said it couldn't open Meta's Ad Library. |
| Which API returns a company's ads? | facebook.company_ads, by company name or page ID, scoped to one country |
| How many ads came back? | 30 on one page of results, 16 of them from the HelloFreshUS page |
| Can you get what a video ad says? | Yes. facebook.ad_transcript returned speech for both videos requested. |
| Does it show which ads perform? | No. The records had no impression figures, spend, sales or conversions. |
Check that AnyAPI is enabled in Claude
Open Claude in your browser. Use + > Connectors and check that AnyAPI is enabled. The connector makes AnyAPI available as native tools in the chat, so Claude can find APIs and retrieve data without a file upload or local terminal.

This walkthrough starts with an already connected account. It doesn't demonstrate first-time setup.
Ask Claude to find the right API and show the cost
Start with the advertiser and market you mean, and keep the free search separate from paid collection:
Use the AnyAPI connector to help me compare HelloFresh's public US ads.
Find the appropriate API and read its inputs. Show the proposed request
and its quoted USD cost before retrieving paid data. Wait for my approval.
Don't use another connector or web search.Claude searched the catalog, picked facebook.company_ads because it takes a company name or page ID and can scope results to a country, and read its inputs. It proposed the company name "HelloFresh", country US, active ads only, sorted by impressions, and quoted $0.0012 for the call. That's a flat price per call, not per ad.

Check what the request covers before you approve it: the advertiser, market, status and how results are ordered. Don't approve a request for an advertiser you don't recognize.
Confirm the advertiser before comparing its ads
Approve the quote and ask Claude to show who the ads belong to:
Approved as proposed. Run the advertiser request I approved through
AnyAPI. Show the returned advertiser name and page ID so I can confirm
it's HelloFresh. Explain the collection date and what this returned
selection covers. Don't collect additional results without showing the
cost and asking me first.The call returned 30 ads, all named "HelloFresh" with the same page ID. Only 16 of them showed HelloFresh's own US page, facebook.com/HelloFreshUS. The other 14 showed different page URLs, and many carried "#ad" text or creator-style promo codes. Claude said they look like partner or creator ads, but the data doesn't say so, and offered to filter to the HelloFreshUS page.

Thirty ads on one page aren't HelloFresh's full inventory. The API reported a totalResults of 252, and Claude couldn't confirm that figure was limited to active US ads. The response also had no impression figures, so it couldn't verify the sort order and treated the 30 as a sample rather than a ranked top 30. The responses carried no timestamp; Claude recorded October 8, 2026 as the collection date because that's when the call ran and every ad's endDate converts to that day.
Keep the video's speech unknown unless you have a transcript
Narrow the set to the advertiser's own page and ask for the written fields before requesting speech:
Keep only ads from the HelloFreshUS page. Show the selected ads' IDs,
public links, formats, written copy, headlines and button labels. Keep
photo ads separate from videos. If a video transcript would help, show
its quoted cost and ask before requesting it. If speech is unavailable,
say so. Don't reconstruct it from written copy or conclude the video was
silent.Claude filtered the 30 ads it already had down to 16 at no cost: nine photo ads and seven video ads. The API hadn't returned a public link for these ads, so Claude built each one from the Ad Library ID, said so, and said it hadn't opened them.

For speech, Claude found facebook.ad_transcript, which returns one video ad's transcript by ad ID. It quoted $0.0012 per call, warned that default routing could let a pricier source serve it at up to $0.036, and priced a pinned request that uses only the cheaper source and refuses without charge if that source can't serve. All seven videos would have cost $0.0084.

The approval named two ads and the quoted request:
Approved: request transcripts for the two single-video ads only,
1088036867318040 and 2123609284962614, using the pinned $0.0012 request
you quoted. Then tell me what each transcript returned. If speech is
unavailable, say so.Both returned speech, for $0.0024 together. The two scripts are near-identical first-person testimonials that open "I wish I knew this before trying HelloFresh." They say "There's no commitment and I can skip a delivery anytime," which doesn't appear in those ads' written copy. The written copy leads with "home-cooked meals in 30 minutes or less" instead.

The other five videos have no transcript, so the files say nothing about their audio.
Ask for a comparison you can check
With the records in the chat, ask for the files:
Use only the AnyAPI records already returned in this chat. Create
ad-research.csv and a readable ad-research.md note. Keep each selected
ad's ID, advertiser, public link, format, written copy, headline, button
label, collection date and transcript status. Missing fields stay
missing.
For every observation about the offer or message, include a short exact
quote, its source field and the public ad link. Keep copied words
separate from interpretation. Don't infer spend, targeting, sales,
conversions or which ad is winning. Check quotes and IDs against the
returned records. Provide actual downloadable files if this chat
supports them; otherwise show the complete outputs and explain the
limitation.Claude made both files with download buttons. The CSV has the 16 ads, photo ads first, with empty cells where the records had nothing. The note has a record card for each ad and 27 observations, each with the exact quote, its source field, the ad link and a separate "Reading (mine)" line for Claude's interpretation.
It also checked its own work with a script: every quote is an exact substring of the cited field. It named the limit of that check. It had typed the records into the script itself, so a typing slip would get through, and it caught one start date it had mis-pasted. It corrected two earlier replies: ad 1915068113187753's button is "Sign up", and 28 of the 30 ads started September 23, not 26.

Claude flagged one cost it couldn't settle. To check wording, it reread the saved company-ads result, a step that's documented as free. The response showed costUsd: 0.0012 again, and Claude said it couldn't tell whether that was an echo or a new charge. Check your AnyAPI request history whenever an agent reports a cost it can't explain.
Download the files exactly as Claude produced them: ad-research.csv and ad-research.md. Links marked as constructed weren't returned by the API, so open a couple before relying on them.
Check one claim against its source
Pick an observation and trace it back. Observation O23 quotes "There's no commitment and I can skip a delivery anytime." from the transcript field of ad 1088036867318040, and its reading says the claim isn't in that ad's written copy. Open the ad's card in the note, compare the quote with the full transcript and the written copy above it, and then follow the Ad Library link.
A copied quote can be accurate while the reading around it is wrong. Keep the two apart when you reuse the comparison.
How I measured it
The run was one chat in Claude's web app, finished on October 8, 2026.
- Claude was asked first without AnyAPI, with web search off, and listed ways to collect the ads by hand.
- Each paid request ran only after its quote was approved:
facebook.company_adsonce, thenfacebook.ad_transcriptfor two videos. - Claude built both files from those records only and checked every quote against its cited field with a script.
The ads request was charged $0.0012 and the two transcripts $0.0024 together. The reread showed another $0.0012 that Claude couldn't explain. The data came through Facebook company ads and Facebook ad transcripts.
Limits: public copy doesn't show which ads convert
Public text supports a comparison of messages, offers and calls to action. It doesn't establish audience quality, spend, sales or conversion rate, and the records here contained none of those. Sixteen ads from one page of results aren't the advertiser's full inventory, and two transcripts don't describe the other five videos. Keep missing speech, collection dates and selection limits with the export.
Browse Facebook company ads for current inputs and pricing.
Every endpoint is priced in plain USD per call. New accounts start with free credit, no card required.
Connect AnyAPI to Claude and research an advertiser
Use data responsibly and follow AnyAPI's Acceptable Use Policy.