Instagram, Facebook & Threads Post Metrics Tracker
Pricing
from $3.00 / 1,000 post trackeds
Instagram, Facebook & Threads Post Metrics Tracker
Are your campaign posts still growing, and still up? Track Instagram, Facebook and Threads posts on a schedule: likes, comments, shares, views and followers, the change since the last check and since the first, and which posts are no longer up. No login. Export to CSV or Excel.
Pricing
from $3.00 / 1,000 post trackeds
Rating
0.0
(0)
Developer
CHEN-SHU-CHEN
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Features
Share
Your creators have posted. Are the posts still growing, and are they all still up?
Add your campaign's Instagram, Facebook and Threads post links once and put this Actor on a daily schedule. Every morning you get one table showing what each post gained since yesterday and since you started tracking, and which posts were taken down.
No login or Instagram account needed. It reads public posts and never signs in, so your accounts and your clients' accounts are never touched. Download each run as Excel or CSV, or open it in Google Sheets.
Example of a daily run (simplified; the real columns are listed under Output):
| Post | Likes | Since yesterday | Since first check | Status |
|---|---|---|---|---|
| @creator_a, Instagram reel | 9,840 | +410 | +6,120 | Live |
| @creator_b, Instagram post | 3,215 | +12 | +1,050 | Live |
| @creator_c, Threads post | 1,480 | +95 | +640 | Live |
| @creator_d, Facebook post | 4,210 | Deleted: first found missing on Oct 12, last seen at 4,210 likes |
By day three you can see that @creator_b's post has stalled and @creator_d's post is gone, before your client asks. Comments, shares, views and follower counts get the same three columns, wherever the platform shows them (Instagram and Facebook photos have no views, and Instagram has no shares).
Why agencies and brand teams use it
- Know which creators are delivering while there is still time to act. You see on day two that a post has stopped growing, not in the wrap report.
- Catch sponsored posts that were deleted early. A post that disappears before the agreed date shows up with the date it was first found missing and its last numbers, so you have the facts for the conversation. A post is marked deleted only when the platform itself says it no longer exists. A page that fails to load, or asks for a login, is reported as exactly that and keeps its last numbers, so a bad connection is never reported as a deletion.
- No more subtracting spreadsheets. You no longer keep yesterday's export to work out today's change. Turn on the history option and you can chart any post over the whole campaign.
Price: $0.003 per Instagram or Threads post per check, $0.006 for Facebook. Checking 50 Instagram or Threads posts daily for a month costs $4.50. Apify's free plan includes $5 a month, which is about 1,600 Instagram checks, so you can try it on a real campaign first.
TikTok and YouTube posts are not tracked yet. For a one-off reading of YouTube posts, and of TikTok posts from November 1, 2026, use Post Metrics. It tracks posts you already have links to. To find posts by hashtag, keyword or account, use a platform-specific scraper.
How to track post metrics
- Paste your post URLs into Post URLs.
- Enter a Tracker name, one per campaign, such as
spring-launch. The history is saved under this name. - Click Start. The first run is the starting point, so its change columns are empty.
- In Apify Console, open Schedules and create a schedule. Daily is enough for most campaigns.
- Add this Actor to the schedule with the same input, especially the same Tracker name.
- Export the results as CSV, Excel or JSON, or read them through the Apify API.
To change the list later, edit the input saved on the schedule. Posts already in the list keep their history, and new ones start their own.
How the history works
The history is kept in your Apify account, in a key-value store named post-tracker-{trackerName}. It stays there until you delete it, so the next run can compare against it, whether that is a day or a month later.
- Use a different Tracker name for each campaign. Two campaigns under one name share one history.
- Adding a URL later is fine. Its history starts on the first run that sees it.
- Removing a URL keeps its history. If you add it back, the change is measured from its last reading.
- The same post listed twice in one run is read and charged once.
- Use the same link for a post every run. Its history is filed under that link.
Unknown is null, never 0. If an author hides their like count, likeCount is null, and so is its change. A count that goes down shows up as a negative change. That is real: people take back likes, and platforms remove spam comments.
Deleted posts keep their last-known numbers. When a post disappears, its row comes back as not_found, with the last numbers that were read for it and valuesAreLastKnown: true. To total only this run's fresh readings, filter on valuesAreLastKnown.
Every URL gets a row: 100 URLs in, 100 rows out.
How much does it cost?
You pay for each post read, on each run.
| Event | Charged for | Price |
|---|---|---|
post-tracked | Each Instagram or Threads post read | $0.003 |
post-tracked-facebook | Each Facebook post read | $0.006 |
post-unavailable | Each post that could not be read | $0.0005 |
Facebook costs more because it needs residential proxies, which cost more to run.
You are not charged for:
- a post listed twice in the same run (only the first is charged);
- links that are not supported;
- posts the run did not reach because it stopped early.
When Facebook keeps failing to load a post, the tracker tries it less often, and the runs in between are not charged.
A daily schedule over 50 posts is 50 events a day. A deleted post is charged as post-unavailable on every run until you remove it from the list.
To cap what a run can spend, set a maximum cost per run. The run stops when the next post would go over it. The posts it did not reach come back as not_processed, with their last-known numbers, and are not charged.
Input
{"postUrls": ["https://www.instagram.com/p/DeclSZmF_7I/","https://www.threads.com/@nasa/post/Decc755lYhC"],"trackerName": "my-campaign","fetchFollowers": true,"writeHistoryDataset": false}
| Field | Description |
|---|---|
postUrls | Post URLs. Platforms can be mixed. |
trackerName | Which history to read and add to. Use one name per campaign, and the same name on every run. Letters, digits and hyphens, up to 40 characters. |
writeHistoryDataset | Also save every reading to a dataset, for charts (see below). Off by default. |
maxSnapshotsPerPost | How many readings of each post to keep. Default 1000. |
fetchFollowers | Also track each author's follower count. |
abortAfterConsecutiveFailures | Stop the run if this many posts in a row cannot be read. Deleted posts do not count. |
proxyConfiguration | Proxy for Instagram and Threads. The default works. |
facebookProxyConfiguration | Proxy for Facebook. Keep it on residential. |
Supported links:
- Instagram: posts and reels.
- Threads: posts.
- Facebook: posts, reels, videos and photos.
Output
One row per URL. This is a post on its second run:
{"status": "success","platform": "Instagram","postUrl": "https://www.instagram.com/p/DeclSZmF_7I/","username": "nasa","mediaType": "carousel","likeCount": 1918845,"likeCountDelta": 33,"likeCountSinceFirst": 33,"replyCount": 6013,"replyCountDelta": 0,"viewCount": null,"viewCountDelta": null,"observedAt": "2026-10-18T09:12:40.000Z","previousAt": "2026-10-18T09:12:04.000Z","hoursSincePrevious": 0.01,"snapshotCount": 2,"valuesAreLastKnown": false}
| Field | Notes |
|---|---|
likeCount, replyCount, shareCount, viewCount, followerCount | Current likes, comments, shares, views and followers. |
likeCountDelta … followerCountDelta | Change since the previous reading. |
likeCountSinceFirst … followerCountSinceFirst | Change since the first reading. |
observedAt | When this run read the post. |
previousAt, hoursSincePrevious | When the previous reading was, and how many hours ago. |
firstSeenAt, hoursSinceFirst | When the first reading was, and how many hours ago. |
snapshotCount | How many times this post has been read, including this run. |
valuesAreLastKnown, lastKnownAt | true when the numbers come from an earlier run, and when that run was. |
notFoundSince | When a deleted post was first found missing. |
Each row also has the post's details: status, platform, postUrl, username, authorUrl, mediaType, createdAt, text, hashtags and mentions. Threads rows also have repostCount and quoteCount.
The run's key-value store holds two more records:
FAILED_URLS: the posts that could not be read, and why.RUN_SUMMARY: the run's totals, plus any tracked posts that were left out of this run's list.
History dataset for charts
With writeHistoryDataset on, every successful reading is added to the dataset post-tracker-{trackerName}-history. To chart one post over time, filter on postUrl and put observedAt on the x-axis. You can delete the dataset in Storage when the campaign is over.
Before, during and after a campaign
| Stage | Actor | What you get |
|---|---|---|
| Before: choosing creators | Instagram Engagement Rate Calculator & Audit | Followers, median engagement rate and posting frequency per account |
| During: while the posts are live | This tracker | The same posts re-read on a schedule, with growth since the last run and since tracking started, and deleted posts flagged |
| After: the wrap report | Instagram, Facebook, Threads & YouTube Post Metrics | One table of every post's final numbers, YouTube included and TikTok from November 1, 2026, with no history to keep |
FAQ
Is the change measured per day?
No, it is measured between readings. If a run could not read a post, the next reading's change covers both intervals. hoursSincePrevious tells you how long that was.
Are share links and plain links the same post?
Yes. Links that differ only in share parameters (igsh, utm_*, fbclid and so on), www. or a trailing slash count as the same post.
How much history is kept?
Up to 1000 readings per post by default, which is almost three years of daily runs. The first reading is always kept, so the change since the first stays exact.
What if Apify restarts a run?
Apify sometimes moves a running Actor to another server. The tracker picks up where it stopped instead of starting over, so the posts it already finished are not read again.
Can it track reach, impressions or private accounts?
No. Reach and impressions are visible only to the account's own admins. Private accounts and posts that need a login can't be read either.
Why does an Instagram follower count barely move?
On large Instagram and Facebook accounts the follower count is sometimes shown only rounded, such as 2.8M, so small changes don't show up. Treat followerCountDelta on large accounts as approximate. Threads follower counts are exact.
Something broke or a number looks wrong
Platforms change their pages from time to time. Open an issue in the Issues tab with the post URL and the run link.
