Stop scrolling an affiliate marketing spy tool's UI one ad at a time. Pull thousands of ads as JSON and rank the offers yourself.
Meta, Google, and TikTok. Filter by country, sort by how long each ad has been running, and get the landing page URL for every single one.
No credit card required
Run duration on every ad
the closest public signal to profitability
Country-level filtering
see what runs in each GEO you buy
JSON, not a dashboard
sort and score offers in your own stack
Brand teams want to know what a competitor is saying. You want to know which offer is printing money right now, and what the funnel behind it looks like. Different job, different data.
Nobody keeps paying to run an ad that loses money. On Meta, every ad comes back with startDate, endDate and totalActiveTime. Sort a competitor's whole library by run duration and the winners float to the top in one query.
Every Meta ad returns link_url — the destination behind the creative. Pull the full library and you have the complete list of prelanders and offer pages a competitor is driving traffic to, ready to crawl or diff over time.
Pass country_code and get only what's running in that market. Run the same domain across DE, IN, JP and BR and you can see which creatives are localized, which are copy-pasted, and which markets a competitor has quietly stopped buying.
Use active_status to pull only what's still running, or deliberately pull the inactive ads to study what got killed and how fast. A creative that died in four days tells you as much as one that's been up for four months.
media_type narrows a pull to image, meme, or video. On Meta you can also pass check_ugc to have videos classified as user-generated or not — useful when you're deciding whether a vertical is won by polished production or by UGC.
publisherPlatform tells you whether an ad is running on Facebook, Instagram, Messenger, or Audience Network. Cross-reference with run duration to work out which placement is carrying the campaign.
Worth reading before you sign up, so you don't waste a week finding out the hard way.
Meta (Facebook, Instagram, Messenger, Audience Network), Google — including search, display and YouTube — LinkedIn, and TikTok. These are the platforms that publish official ad transparency data, which is why the coverage is complete rather than sampled.
If you buy on the compliant side of the market, this is your inventory.
Native networks (Taboola, Outbrain, MGID, Revcontent), push, pop and adult traffic. None of them publish an ad library, so the only way to see that inventory is a bot fleet browsing sites in each country — a different business from ours.
If native and push are your main traffic sources, AdPlexity and Anstrex are the right tools and we won't pretend otherwise.
Most affiliate marketing spy tools — BigSpy, AdSpy, AdPlexity, Anstrex — bill per seat and put the useful features behind higher tiers, so pricing climbs the moment you add a second channel. Adyntel bills per API call instead: 50 free credits to get started, then you pay only for the campaigns and ad intelligence you actually pull.
Most affiliate marketing spy tools are a UI and nothing else. You search, you scroll, you eyeball a few hundred ads, you bookmark the ones that look good. That works until you're tracking twenty competitors across six GEOs, at which point you're doing data entry for a living.
With an API you pull the whole library once, drop it in a table, and write the ranking logic yourself: ads still active after 30 days, in Germany, video format, sorted by totalActiveTime descending. That's one query, and you can run it again next week to see what changed.
Set all_ads to paginate a full library automatically, or pass a webhook_url and let large pulls finish in the background.
response = requests.post('https://api.adyntel.com/meta', json={
'api_key': key,
'email': email,
'company_domain': 'competitor.com',
'country_code': 'DE',
'media_type': 'video',
'active_status': 'all'
})
ads = response.json()['data']['ads']
# winners first
ads.sort(key=lambda a: a.get('totalActiveTime') or 0, reverse=True)
Validating an offer before you commit budget, and watching whether the people already running it are scaling or backing off.
Tracking which advertisers are live on an offer in your GEO, and pulling their creative and landing pages into one place to work from.
Running the same competitive pull across every account on a schedule instead of researching each one by hand.
Teams building an internal creative library, an offer-tracking dashboard, or a bot that pings Slack when a competitor launches something new.
For brand-side competitive research, see competitor ads. For a broader tool comparison, see our full tool comparison.
startDate, endDate and totalActiveTime, and Google returns start and last_seen. Sustained spend on the same creative is the strongest public proxy for profitability.country_code and you'll only get ads running in that market. The Google endpoint returns the region on each result but doesn't take a country filter on the request, so you filter Google results after the pull.link_url, the destination the ad points to. We return the URL — we don't download or clone the page itself.