First 200 users get the Growth plan for $19/mo.

Claim

Competitor numbersyou can actually cite.

Track the engagement Instagram will serve on a competitor’s professional account, and what changes on their landing pages. Meta’s ad archive is built and waiting on the identity-confirmed credential its API demands, so it is not collecting yet. Every figure here is one we observed. The figures nobody can observe, spend, impressions, CTR, ROAS, are left blank and labelled, because a modelled number in a client deck is a liability.

InstagramMeta Ad LibraryLanding pagesPricing pagesChange alerts

Cancel anytime · Meta’s ad archive holds commercial ads that reached the EU or the UK

Numbers we actually observed

Real engagement, counted not estimated.

Instagram tracking runs through your own connected Instagram professional account, so the like, comment and view counts are the ones Instagram returns for that brand. Meta has not granted the Instagram permission that read needs outside our own app roles yet, so today it answers for accounts holding an admin, developer or tester role on our app and shows everyone else a permission notice instead of a number. We read that per connection from the token Meta actually issued, never from a review result written into our code. When it does answer, engagement rate is arithmetic, not a model: likes plus comments over followers. When Instagram withholds one of those inputs there is no rate to work out, and you get no rate rather than a zero.

@rival.one · last 30 days104k followers
Reel · founder skit4,1023.9%
Carousel · 5 tips1,8801.8%
Photo · product shotHiddenNo rate

This account hides its likes, so that post has no rate. Not a rate of zero.

Instagram engagement

Likes and comments, as returned

Read through your own connected Instagram professional account, and only where Meta has granted the permission: it is pending App Review, so outside our app's own roles you get that notice rather than a count. Engagement rate is likes plus comments over the account's follower count, and followers are the only denominator Instagram gives anyone for another account.

Against their own median
Beats its own baselineReel · 12 Jun

6.1% engagement against a trailing median of 2.8% over 24 posts.

This post
Their median

It did well for them. It is not a claim about their category.

Outliers

Ahead of their own baseline

A post is marked when it runs well clear of that account's own trailing median. The baseline is that one account and nothing else: not a category, not a market, not an industry benchmark we never measured.

Tracked profiles
@rival.one104k
Median engagement 2.8%n=24
@rival.two48k
Median engagement 1.4%n=31
@rival.threeWithheld
Median engagement No mediann=0
Tracked profiles

The sample size travels with the number

A median over three posts and a median over three hundred look identical on screen, so the count sits beside the median everywhere. A withheld field reads as withheld, never as a zero.

What we will not show you

The blanks are the point.

Plenty of tools in this category will happily show you a competitor’s spend, impressions, CTR and ROAS. None of them can see those numbers. Meta publishes ad spend and impressions for political, issue and social ads only, so a commercial competitor’s figures are a model or a scrape wearing a confident font. We would rather hand you a blank you can defend in a meeting.

Competitor performance
SpendNot published
ImpressionsNot published
CTRNot published
ROASNot published

Meta publishes these for political, issue and social ads only.

No spend or ROAS

Four numbers we refuse to print

Spend, impressions, CTR and ROAS for a commercial advertiser are not published anywhere anyone can legitimately reach. We show the field as unavailable and say why, instead of filling it with an estimate you would have to defend.

One archived ad
Creative textPresent
Ran from / toPresent
PlatformsPresent
LikesCommentsShares

No such field in the archive, for any ad type

No ad-level engagement

A field that does not exist

Likes, comments and shares on a specific archived ad are not in Meta's archive for any ad type at any access level. A tool showing them for a competitor's ad is reading some other object and calling it the ad.

Where the data comes from
Instagram professional accountsYour own connection
Meta Ad LibraryPublic archive
Competitor websitesOur crawler, their robots.txt
TikTokNo commercial API exists
No TikTok

Only sources we are allowed to read

There is no sanctioned commercial route into TikTok data, and its Research API bars commercial use outright. So TikTok is absent from every competitor source on this page rather than quietly scraped into one. Connecting your own TikTok ad account, and publishing to TikTok, are separate roadmap items; neither of them reads a competitor.

Where the numbers come from

Three sources, and no invented fourth.

A brand’s Instagram account through your own connection, Meta’s public ad archive, and their own website read by our crawler. A model then labels what those sources said, and the labels are marked as labels. Nothing on this page is stitched together from a fourth source that does not exist.

Sources
Instagram, Meta archive, their site
Every number
Observed, or left blank
Every label
Marked inferred, opens to source
InstagramMeta Ad LibraryTheir websiteAI taggingAlerts & API
overads Competitors
Their website, re-read daily

What moved on their page, in their words.

overads runs its own crawler over the pages you pin, following the site’s robots.txt and sending no credentials. The once-a-day sweep is a deployment setting that ships off, so pages are re-read on that schedule wherever it has been switched on. Countdown timers and visitor counters move on every single visit, so they are excluded from the headline, button and price comparisons: a ticking clock never reads as a competitor rewriting their call to action. They stay in the content hash on purpose, so a page carrying one is still reported as having moved, with nothing we track behind it. When a pricing page moves, you get the before string and the after string rather than a headline announcing a price cut.

Hero headline · changedToday

Before

Try it free for 14 days

After

Book a demo with our team

Countdown and visitor counter ignored by the headline and button check

Change detection

Before and after, verbatim

The headline, the buttons, the body copy. You see the old string beside the new one and draw your own conclusion, because the sentence a summary would write is the part most likely to be wrong.

Prices differ
Starter$29/mo$29/mo
Pro$99/mo$89/mo
Business$249/mo$249/mo

Strings as published. No direction, no percentage.

Pricing pages

Two strings, no direction

When prices differ between visits we show the plan and both strings. We never state a direction and never compute a percentage: a currency switch, a country variant and a real cut all look identical from outside.

Watched pages
rival-one.com/pricingChanged
rival-two.comServes different versions
rival-three.io/plansRobots says no
rival-four.coNo readable text
Honest crawling

What we could not read, said plainly

Robots.txt says no, the page builds itself in JavaScript, the server never answered. Three different facts get three different sentences, so a page we could not read never reads as a page that did not change.

Meta’s ad archive

How long an ad ran. Not how well it did.

Meta’s Ad Library API answers only a credential belonging to an identity-confirmed person, and ours is still in review, so nothing is being collected from the archive yet. What is built and waiting: a longitudinal index of the advertisers you add, and cohort survival that measures each ad’s run against the Kaplan-Meier median run of the ads that advertiser launched in the same month. An ad that had not finished when we last read it counts towards the estimate for the days we actually watched it and then leaves the calculation, rather than entering as though it had stopped at its current age, and a month where more than half the ads are still running gets no median at all rather than a low one. Survival is a claim about duration, and the column header says exactly that: “Ran vs cohort median”, never “Performance”.

Ran vs cohort median
Founder story, 30s2.4x
Bundle offer, static1.1x
Testimonial carousel0.6x

Duration only. The archive never publishes what an ad cost.

Survival

Ran vs cohort median

A ratio against the ads that advertiser launched the same month. The archive publishes how long an ad ran and never what it cost, so a small retargeting ad can outlast a scaled campaign that did its job in three weeks.

Indexed advertisers
Rival One142 ads

since 12 Mar

Rival Two38 ads

since 2 Jun

Rival ThreeNo ads held

added 3 days ago

No backfill exists. Nothing here predates the day you added them.

Longitudinal index

History starts the day you add them

Meta holds a commercial ad for about a year and offers no backfill, so an advertiser's timeline begins when you index them. The empty state says so, because a fresh index and an advertiser who runs nothing look identical otherwise.

Inferred from the ad text
Hook: fear of missing outAngle: pricePersona: agency ownerFunnel: consideration

“Last 40 seats at this price. Doors close Friday.”

Source text · what the model read

12 image-only ads: not read yet, not untagged
AI tagging

Every label opens to its source

Hooks, angles, personas, offers and funnel stage, inferred by a model that read the ad's own words. Each label is marked inferred and opens to the exact text it came from, and an ad nothing has read says unread rather than showing no tags.

Coverage, before you pay

Read this before you sign up.

Meta archives a commercial ad only where that ad reached the EU or the UK, and holds it for about a year with no backfill. A brand advertising solely in the United States or India has nothing in the archive at all, and a search for them comes back empty because the archive never had to keep them, not because they run no ads. Instagram tracking and landing-page tracking carry no such limit and work wherever the brand does. We would rather you knew that now than after your first invoice.

Meta ad archive · commercial ads
EU 27 and the United KingdomArchived

Roughly the last year, no backfill

US, India, Canada, Brazil, elsewherePolitical ads only

A US-only advertiser will return nothing here

Instagram and landing-page tracking work in every market.

Where the archive has anything

The EU 27, the UK, and that is it

Commercial ads are archived on EU or UK delivery. Everywhere else the archive holds political, issue and social ads only, so the country picker defaults to the archived corpus rather than to your home market and labels anything outside it.

Trend window
7 daysComputed
30 daysComputed
90 daysWe hold 41 of 90 days
6 monthsWe hold 41 of 182 days

Never a flat line, never a zero, always the number of days.

Trend windows

We say how much history we have

Ask for a 90 day trend six weeks in and you are told we hold 41 of 90 days. A window longer than the collected history returns the floor date rather than a number, because a flat line and a zero would both read as a measurement.

Where the findings land

Out of the tab, into your week.

One batched daily alert when a tracked competitor does something well outside their own normal on Instagram, and a Monday brief across every brand you track. The brief names the brands we could not reach and why, because a competitor missing from a report reads as a competitor doing nothing. Alerts go to email, Slack, Discord, Teams or Telegram, next to the alerts you already get from your cross-platform ads manager.

Today’s batch · 1 email
@rival.oneBeats its own baseline

A Reel well clear of their trailing median

@rival.twoFollowers moved

Up 4,120 since the last reading we got

EmailSlackDiscordTeamsTelegram
Alerts

One batched email, not a firehose

A tracked competitor posts well outside their own normal, or their follower count moves sharply, and you get a single batched alert that day. Five channels to choose from, and one email at most. Landing-page changes are not emailed: those you read in the app.

Monday brief · 4 tracked
Rival One9 new posts, one well past their median
Rival TwoQuiet week, nothing changed
Rival ThreeNot read: the permission is pending review
Rival FourNot read: Instagram withheld followers
Monday brief

Including the ones we missed

A Monday read of every tracked competitor. Brands we failed to reach are listed by name with the reason attached, so a quiet week and a failed crawl never look the same in your inbox.

Workspace keys
Reporting botread only

oa_live_••••••••••••3f9c

MCP serverBeta program

Scoped to this workspace, revocable at any time

API and MCP

Your data, in your own tools

Scoped, revocable workspace keys give your own scripts a public API over your own ad accounts and our own landing-page crawl. Anything derived from Meta is held back: the Instagram readings sit behind a legal review of Meta's Platform Terms and answer 404 rather than an empty list, and the ad archive has no route at all yet. The same keys drive the MCP server, which you opt into from the beta program. API access is included on Growth and Scale.

Competitors FAQ

Before you track anyone

Anything else? Email hello@overads.io and a human will reply within a business day.

Where do the Instagram numbers come from?

From Instagram, through your own connected Instagram professional account, and only for a competitor whose own account is a professional one Instagram is willing to describe: a personal account and an age-gated professional account both come back with nothing. One permission that read needs, instagram_basic, was denied at App Review on our publishing app, so today the feature answers for accounts holding an admin, developer or tester role on it and shows everyone else a permission notice instead of a number. We read that per connection from the token Meta actually issued, never from a review result written into our code. When it does answer, the like, comment and view counts are the ones Instagram returns for that brand, and engagement rate is arithmetic on top of them: likes plus comments over the account's follower count. Followers are the only denominator Instagram gives anyone for another account, so it is not a rate against the people who actually saw the post, and we say so on the number. If Instagram withholds an input, there is no rate, and you see no rate rather than a zero.

Why can I not see a competitor's ad spend, impressions, CTR or ROAS?

Because nobody can. Meta publishes spend and impression ranges for political, issue and social ads only. For a commercial advertiser those figures do not exist at any access level, so every tool that shows them is modelling or scraping and presenting the result as fact. We show the field as unavailable and say why. That blank is the one number in the category you can take into a client meeting and defend.

Does the Meta ad archive cover my market?

Only if your competitors advertise into the EU or the UK. Meta archives a commercial ad where it reached the EU or the UK and holds it for about a year with no backfill; elsewhere the archive keeps political, issue and social ads only. A brand advertising solely in the United States or India will return nothing, and that is the archive's coverage rather than evidence they run no ads. Instagram tracking and landing-page tracking have no geographic limit.

Is the survival number a performance score?

No, and the column header says so: it reads Ran vs cohort median, never Performance. Survival measures each ad's run against the Kaplan-Meier median run of the ads that advertiser launched in the same month. An ad that had not finished when we last read it counts towards the estimate for the days we watched it and then leaves the calculation, rather than entering as though it stopped at its current age, and a month where more than half the ads are still running gets no median at all. The archive publishes duration and never cost, so a small retargeting ad running all year can outrank a scaled campaign that did its job in three weeks. Read it as longevity, not as return. None of it is collecting yet: Meta's Ad Library API answers only an identity-confirmed credential, and ours is still in review.

Do you track TikTok?

No. There is no sanctioned commercial route into TikTok data, and TikTok's Research API bars commercial use. Rather than scrape it and call the result a feature, we leave TikTok out of every competitor source we run. Connecting your own TikTok ad account, and publishing to TikTok, are separate roadmap items and neither of them reads a competitor. If competitor data changes through an official route, it will show up in the changelog.

How does landing-page tracking avoid false alarms?

Our own crawler re-reads the pages you pin, following the site's robots.txt and sending no credentials, on a once-a-day sweep that ships off and is switched on per deployment. Countdown timers and visitor counters change on every visit, so they are excluded from the headline, button and price comparisons, and a ticking clock never reads as a changed call to action. They stay in the content hash on purpose: a page carrying one is still reported as having moved, with nothing we track behind it, because masking them out of the hash is how a real price change gets swallowed. Pages that serve different content on different visits are flagged as such, because that is what an A/B test or a country variant looks like from outside. We do not execute JavaScript, so a page built in the browser reads as unreadable rather than as unchanged.

Are the AI labels on hooks and angles facts?

No, they are readings, and they are labelled that way. A model reads the ad's own words and infers the hook, angle, persona, offer and funnel stage. Every label is marked inferred and opens to the exact source text it came from, so you can check it in one click. An item nothing has read says it has not been read rather than showing an empty set of tags.

What does competitor tracking cost?

It is part of the overads superapp and included on every plan: Starter $49/mo, Growth $149/mo, Scale $299/mo. Programmatic access through the public API is included on Growth and Scale, and today it carries your own ad accounts and our own landing-page crawl. The Instagram readings are held behind a legal review of Meta's Platform Terms and the ad archive has no route yet, so those endpoints answer 404 rather than an empty list. The MCP server is opt-in from the beta program.

Start tracking

Track your rivals on numbers you can defend

Instagram engagement they actually earned, and every change on their landing pages. Where nobody can see, you get a labelled blank instead of an estimate. No invented spend.