Instagram Competitor Monitor
Pricing
from $5.00 / 1,000 competitor checkeds
Instagram Competitor Monitor
Track up to 20 Instagram accounts and see what changed since the last run. You get one row per account. It shows followers, following and posts gained or lost. It also shows bio and verification changes. You get the exact time window too.
Pricing
from $5.00 / 1,000 competitor checkeds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Competitor Monitor: what changed on a rival account since your last run
List the Instagram accounts you want to watch and get one row per account back, with the current follower, following and post counts and the change since the last time you ran it. Bio edits and a gained or lost blue tick are flagged too, with the exact window the comparison covers.
The first run on any handle has nothing to compare against, so it writes the baseline and every
delta comes back null with isFirstRun: true. Run it a second time and the numbers start meaning
something. That is not a limitation you can configure away, it is just how a before-and-after works.
| Input | 1 to 20 Instagram handles, @handles or profile URLs |
| Output | One row per account, with the change since last time |
| Ceiling | 15 accounts checked per run |
| Account needed | None from you |
| Price | $0.005 per account checked, flat on every plan |
๐ What Instagram Competitor Monitor does
Each run reads the public profile of every handle you gave it, compares it against the snapshot from your previous run, writes the row, and then stores the new snapshot for next time. The history lives in a key-value store on your Apify account, so your baselines are yours and nobody else's runs touch them.
Put it on a daily schedule and the rows become a time series. hoursSinceLastCheck and
previousCheckedAt sit on every row, so you always know what window a delta actually covers rather
than assuming it was 24 hours.
Nothing to log into. The same account written two ways in one list is checked once and billed once.
๐ฅ What you give it
There is one field. That is the whole input.
{"competitors": ["nasa", "@natgeo", "https://www.instagram.com/nike/"]}
| Field | Default | What it is |
|---|---|---|
competitors | none | 1 to 20 entries. A bare handle, an @handle or a full profile link, mixed freely. Duplicates are collapsed. |
Post and reel links are not accounts. Paste one and you get an uncharged row saying so, and the rest of your list carries on.
Start a run with nothing filled in and you get one labelled sample row showing what a second-run row looks like. That row is not charged.
๐ค What you get back
A real row from a real run, with one emoji cut out of the bio:
{"ok": true,"recordType": "competitor","username": "nasa","fullName": "NASA","isVerified": true,"isPrivate": false,"isBusiness": true,"profileUrl": "https://www.instagram.com/nasa/","followers": 104352676,"following": 91,"posts": 4928,"biography": "Making the seemingly impossible, possible. ...","externalUrl": "https://www.nasa.gov","followersDelta": 7,"followingDelta": 0,"postsDelta": 0,"biographyChanged": false,"verifiedChanged": false,"isFirstRun": false,"hoursSinceLastCheck": 0.02,"previousCheckedAt": "2026-09-21T01:32:55.336Z","checkedAt": "2026-09-21T01:34:02.684Z"}
That row came from a deliberate back-to-back test, which is why hoursSinceLastCheck is a minute
rather than a day. Seven followers in a minute is what a 104-million account does while you look
away.
| Field | What it is |
|---|---|
followersDelta, followingDelta, postsDelta | Signed change since your previous run. Negative when the number went down. All null on a first run. |
biographyChanged, verifiedChanged | true when the text or the tick moved between the two runs. null on a first run. |
isFirstRun | true means this run wrote the baseline and there was nothing to compare against. |
hoursSinceLastCheck, previousCheckedAt | The window the deltas cover. Read these before trusting a delta. |
biography, externalUrl | The current values, so you can see what a flagged change actually says. |
followers, following, posts | Current counts. On a private account these can be null rather than zero. |
Nothing is guessed. A field Instagram did not send comes back null.
๐งพ Reading the output
Three kinds of row land in your dataset, and only the first kind is billed.
| Row | How to spot it | Billed |
|---|---|---|
| An account check | recordType: "competitor" | yes |
| The sample row | _sample: true, and only on a run with no handles | no |
| A diagnostic | ok: false and a code | no |
Rows also carry a charged flag. It labels real rows against samples and diagnostics rather than
being a receipt, so count your competitor rows if you want to check the bill.
| Code | What it means |
|---|---|
BAD_INPUT | Not an account. A post link, or more than 20 entries in the list. |
NOT_FOUND | Instagram has no such account any more. |
PARTIAL | The run stopped before reaching that handle. What arrived is complete and correct. |
TIME_BUDGET | The run ran out of time before reaching that handle. |
STATE_UNAVAILABLE | The stored history could not be read, so that account was skipped this run. |
STATE_NOT_SAVED | The row was delivered but the new snapshot did not save, so the next run will compare against the older one. |
RATE_LIMITED | Too many runs too close together. Space them out. |
SERVER_ERROR, NETWORK, CHARGE_ERROR, UNEXPECTED_ERROR | Something that did not fit the list above. |
No diagnostic row is billed, and one bad handle does not stop the others.
โถ๏ธ How to run it
- Open Instagram Competitor Monitor and click Try for free.
- Put the accounts you want to watch into Instagram accounts to monitor.
- Click Start. This first run writes the baseline, so the deltas will be empty.
- Run it again later, or put it on Apify's scheduler, and the second run onwards carries the changes.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
๐ฐ How much does it cost?
$0.005 per account checked, which works out at $5.00 per 1,000 checks. Flat on every Apify plan, no volume tiers.
One charge per account row. The same handle listed twice in one run is billed once. Sample rows and diagnostic rows are not billed, so a dead handle or a run that stops early does not cost you results.
๐ก What people use it for
- A daily run over a shortlist of rivals, so a follower spike is visible the morning after rather than at the end of the quarter.
- Catching a bio or link-in-bio change, which is usually the first public sign of a launch.
- Watching when an account starts or stops posting, through
postsDelta. - Keeping an honest record of growth claims before a partnership conversation.
๐ง What it does not do
- The first run has no deltas. It writes the baseline. You need a second run.
- The box takes 20 handles, a run checks 15. Anything past that comes back as an uncharged
PARTIALrow rather than being quietly dropped. Split a longer watch list across runs. - Profile numbers only. No posts, no captions, no engagement, no follower lists.
- History is keyed by handle. If an account renames itself, it starts over as a new one.
- Two schedules on the same list will both report, each against its own last run, so the windows overlap and the deltas look wrong. Run one schedule per list.
- Deleting the key-value store resets every baseline you have built up.
- Private accounts give you what Instagram gives a stranger, which can mean
nullcounts. - No alerting. It writes rows. Wiring a Slack message to a
followersDeltathreshold is your side.
๐งญ Which Instagram scraper do you need?
| If you want | Use |
|---|---|
| What changed on a set of accounts since last time | This one |
| A full profile read in one go | Instagram Profile Scraper |
| Who follows an account | Instagram Followers & Following Scraper |
| Their posts and reels | Instagram Scraper |
| Posts other people made about them | Instagram Mentions Scraper |
โ Questions people ask
Why are all my deltas empty? Because it was the first run for those handles. isFirstRun says
so on every row. Run it again and you will get changes.
Where is the history kept? In a named key-value store on your own Apify account, keyed by handle. It is yours, and it persists between runs.
How often should I schedule it? Daily suits most watch lists. hoursSinceLastCheck tells you
what each delta actually covers, so an irregular schedule still gives usable numbers.
Can I watch 50 accounts? Not in one run. Split them into separate runs or schedules.
Does it work on private accounts? Partly. You get whatever Instagram shows a stranger, which for some private accounts means the counts come back empty.
Is scraping Instagram legal? This reads public profiles only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
๐ If something breaks
Open the Issues tab on the actor page. Send the handles you used and the run ID. The code on the diagnostic row usually explains it on its own.


