Instagram Ads Scraper: Ad Library & Creatives avatar

Instagram Ads Scraper: Ad Library & Creatives

Pricing

from $0.15 / 1,000 ads

Go to Apify Store
Instagram Ads Scraper: Ad Library & Creatives

Instagram Ads Scraper: Ad Library & Creatives

Instagram ads scraper for the Meta Ad Library: paste an advertiser's Instagram or Facebook link, a page id or a name, or type keywords, and get every Instagram ad with its copy, images, videos, landing page, CTA, start date, days running and variants. For competitor creative research. No login.

Pricing

from $0.15 / 1,000 ads

Rating

0.0

(0)

Developer

DeepMine

DeepMine

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Instagram Ads Scraper

Instagram ads scraper for the Meta Ad Library: paste a brand's Instagram link (or its Facebook page, page id or name), or type a keyword, and get one clean row per ad it runs on Instagram, with the creative, ad text, headline, button, landing page, format, start date and days running, no login.

AdvertiserAd textHeadlineButtonFormatStartedDays active
GymsharkGet ready to meet SoftSense™, our brand new fabric…New SoftSense™ drops 22nd OctLearn moreDynamic creative2026-10-200
GymsharkSam Sulek's collection, made of the pieces he trus…Oct 22nd. Gymshark x Sam SulekLearn moreDynamic creative2026-10-200
GymsharkSet your reminders for when NEW SoftSense™ drops o…Set your reminders ⏰Learn moreDynamic creative2026-10-200

$0.19 per 1,000 ads from advertiser searches on Starter ($0.22 Free, $0.17 Scale, $0.15 Business); keyword searches $0.59 per 1,000 ($0.62 Free, $0.57 Scale, $0.55 Business). The prefilled run (100 ads) costs about $0.02.

Only ads Meta shows on Instagram (feed, Stories, Reels, Explore), from the public Ad Library: no Instagram or Facebook account, no cookies. Add ad details for the advertiser's verification and Instagram account and, for ads shown in the EU or UK, reach by country, targeted ages and gender, payer and beneficiary.

What you can do with it

  • Competitor creative research: paste your competitors' Instagram links and get every ad they run on Instagram right now, newest first, with the video and image files, hooks, headlines and landing pages.
  • Launch tracking: see the ads a brand started today and how many variants (collationCount) it tests per creative.
  • Winning ads: sort by Days active: ads that keep running for weeks are usually the ones that work.
  • Niche research: search a keyword ("protein powder", "skincare") to find every brand advertising it on Instagram.

Input

FieldWhat it does
AdvertisersBrands whose Instagram ads you want: an Instagram profile link (instagram.com/gymshark), an @handle, a Facebook page link, a page id (129669023798560), an advertiser's Ad Library link, or the name as it shows on its ads.
KeywordsWords to find Instagram ads by, as in the Ad Library search box. One search per line.
CountryTwo-letter code where the ads ran (US, GB, DE, ...) or ALL (US in the form, ALL if left out).
Max ads per searchStop each advertiser or keyword after this many ads (100 in the form, 200 if left out, up to 10,000). You pay per ad.
Include ad detailsAdds the advertiser's profile and EU/UK reach data to each ad, at the with-details price (one more request per ad, so slower).

Under Filters: ad status (active, inactive or both), media type, the Ad Library's date filter (Shown on or after / before: ads shown in that period, whatever day they started), exact phrase for keywords, and ad category (political and issue ads carry spend and impressions). Under More inputs: Ad Library links copied from your browser (their filters are used; the platform is always Instagram) and single ads by their Library ID.

An Instagram link is read as the brand's Facebook page of the same username (the Ad Library lists advertisers by their Facebook page); when there is none, the run looks the brand up by name. The run's OUTPUT says which page each advertiser was read as. Example:

{
"advertisers": ["https://www.instagram.com/gymshark/", "@drinkag1", "15087023444"],
"searchQueries": ["protein powder"],
"country": "US",
"maxAdsPerQuery": 500
}

Output

One row per ad. Advertiser searches come newest first (the ads a brand started today, then yesterday, ...): each advertiser's ads are sorted once its read is done, so they arrive together. Keyword searches come in Meta's own order (most impressions first), page by page. An ad found by several searches appears once, under the first search that found it. Every row is an ad Meta shows on Instagram: platforms always includes Instagram (often with Facebook, Threads and others: one ad can run on several).

A real row from the prefilled run (2026-10-20), clean part (media links cut):

{
"image": "https://scontent-dfw6-2.xx.fbcdn.net/v/t39.35426-6/856155994...",
"pageName": "Gymshark",
"adText": "Get ready to meet SoftSense™, our brand new fabric that responds to your body in real time 🧘‍♀️💖 Drops Thurs 22nd Oct, 12pm MDT.",
"adTextSnippet": "Get ready to meet SoftSense™, our brand new fabric…",
"headline": "New SoftSense™ drops 22nd Oct",
"adLibraryUrl": "https://www.facebook.com/ads/library/?id=1420136789651374",
"landingUrl": "https://www.gymshark.com/pages/soft-sense",
"ctaText": "Learn more",
"format": "Dynamic creative",
"platforms": ["Facebook", "Instagram", "Audience Network", "WhatsApp", "Threads"],
"isActive": true,
"pageLikes": 2230257,
"collationCount": 6,
"adsCount": 5,
"daysActive": 0,
"startedAt": "2026-10-20",
"lastShownAt": "2026-10-20",
"rank": 1,
"totalCount": 924,
"videoUrl": null,
"pageUrl": "https://www.facebook.com/Gymshark/",
"adArchiveId": "1420136789651374",
"pageId": "129669023798560",
"searchInput": "https://www.instagram.com/gymshark/",
"scrapedAt": "2026-10-20T16:47:27Z"
}

Clean fields, in row order:

  • image: the creative's picture: its first image, the video's preview frame, or the first card's image.
  • pageName: the advertiser.
  • adText, adTextSnippet: the ad's primary text in full, and its first 50 characters on one line.
  • headline: the headline under the creative.
  • adLibraryUrl: the ad in the Meta Ad Library.
  • landingUrl: where the ad's button leads.
  • ctaText: the button text, e.g. Shop now.
  • format: Image, Video, Carousel, Dynamic creative, Catalog, ...
  • platforms: where the ad runs: Instagram, plus Facebook, Messenger, Threads, Audience Network, WhatsApp when it runs there too.
  • isActive: still running when the run read it.
  • pageLikes: likes of the advertiser's Facebook page.
  • collationCount: how many ads use this creative and text (the variants a brand tests). Meta says it on one ad of each group, so it's often null.
  • adsCount: how many ads Meta lists together with this one (one result group).
  • daysActive: days from startedAt to lastShownAt.
  • startedAt, lastShownAt: the day the ad started, and the last day it ran (the run's day for active ads).
  • rank: the ad's place in its search.
  • totalCount: Meta's count of Instagram ads matching the search (50001 means 50,000+).
  • videoUrl: the ad's video file, for video ads.
  • cards: for carousel, dynamic and catalog ads, every card's headline, text, description, landing page, button, image and video.
  • pageUrl, adArchiveId, pageId: the advertiser's Facebook page, the ad's Library ID and the page id.
  • searchInput: the advertiser, keyword or link that found the ad.
  • scrapedAt: when the run started (UTC).

With Include ad details, these come after pageUrl: detailsStatus (OK, Not available, Failed), isPageVerified, instagramUrl and instagramFollowers (the advertiser's Instagram account), euReach, ukReach, targetAges, targetGender, reachByCountry, payer and beneficiary (EU/UK ads). Political and issue ads also carry spend, spendMin, spendMax, currency, impressions, reachEstimate and paidFor.

After scrapedAt, every row also has Meta's full ad record under apify/facebook-ads-scraper's field names (adArchiveID, pageID, snapshot with every image and video variant in HD and SD, publisherPlatform, startDateFormatted, categories, ...), so pipelines built on that Actor keep working. The Console tables show the clean fields.

Images and videos expire. image, videoUrl and the media links in snapshot are Meta's signed CDN links; they stop working after a few days, so download what you want to keep.

The run's OUTPUT record lists every search with Meta's count of its Instagram ads (metaCount), the ads delivered and why it stopped (complete, maxAds, chargeLimit, or a failure: blocked, error, incomplete).

How advertiser searches are read

An advertiser's Instagram ads are read day by day, newest first, mostly over Apify's datacenter IPs (Meta's per-day counts say how many ads each day holds), and only the busy days that need it are paged over residential IPs. That's why advertiser searches cost less than keyword searches, whose results must be paged one by one in Meta's order. With Max ads per search below the brand's total, you get its newest days whole (the newest ads first). Measured on the platform (2026-10-20): AG1, all 423 of the Instagram ads Meta counts; Gymshark, 917 of 924; Liquid Death, 274 of 277 (Meta counts a few ads that none of its lists show).

Pricing

Pay per ad, by your Apify plan. No start fee, no monthly fee, platform usage included.

Per 1,000 adsFreeStarterScaleBusiness
Ad from an advertiser search$0.22$0.19$0.17$0.15
Ad from a keyword search$0.62$0.59$0.57$0.55
Advertiser search ad with details$0.37$0.34$0.32$0.30
Keyword search ad with details$0.77$0.74$0.72$0.70
  • An advertiser search is one given in Advertisers (or an advertiser's Ad Library link, or an ad by its Library ID). A keyword search, and an advertiser search with a date filter (Shown on or after / before), are read page by page and cost the keyword price.
  • Ad details add a flat $0.15 per 1,000, only for ads whose details came.
  • Set a maximum cost per run in the run options: the run stops before it would go past it and keeps what it collected (OUTPUT.chargeLimitReached is then true).

Limitations

  • Page transparency (the page's creation date, name changes, admin countries) isn't included yet.
  • An Instagram link works when the brand's Facebook page has the same username or the brand's ads carry its Instagram name; otherwise paste its Facebook page link or page id (the Ad Library link of the advertiser works too).
  • Spend and impressions exist only for political and issue ads (Meta's rule); commercial ads have none in any Ad Library tool.

FAQ

Do I need an Instagram or Facebook account? No. Everything comes from the public Meta Ad Library, without logging in.

Are these only Instagram ads? Yes: every search asks Meta for ads shown on Instagram, and an ad Meta lets through anyway that isn't on Instagram is dropped and not charged.

How many ads can I get? Set Max ads per search up to 10,000. Several advertisers and keywords run in parallel.

Feedback

Found a bug or missing a field? Open an issue on the Issues tab and we'll look at it within 48 hours. Happy with the data? A short review on the Store helps others find this Actor.