Instagram, Facebook & Threads Post Metrics Tracker avatar

Instagram, Facebook & Threads Post Metrics Tracker

Pricing

from $3.00 / 1,000 post trackeds

Go to Apify Store
Instagram, Facebook & Threads Post Metrics Tracker

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

CHEN-SHU-CHEN

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

9 days ago

Last modified

Categories

Features

Limited permissions

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):

PostLikesSince yesterdaySince first checkStatus
@creator_a, Instagram reel9,840+410+6,120Live
@creator_b, Instagram post3,215+12+1,050Live
@creator_c, Threads post1,480+95+640Live
@creator_d, Facebook post4,210Deleted: 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

  1. Paste your post URLs into Post URLs.
  2. Enter a Tracker name, one per campaign, such as spring-launch. The history is saved under this name.
  3. Click Start. The first run is the starting point, so its change columns are empty.
  4. In Apify Console, open Schedules and create a schedule. Daily is enough for most campaigns.
  5. Add this Actor to the schedule with the same input, especially the same Tracker name.
  6. 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.

EventCharged forPrice
post-trackedEach Instagram or Threads post read$0.003
post-tracked-facebookEach Facebook post read$0.006
post-unavailableEach 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
}
FieldDescription
postUrlsPost URLs. Platforms can be mixed.
trackerNameWhich 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.
writeHistoryDatasetAlso save every reading to a dataset, for charts (see below). Off by default.
maxSnapshotsPerPostHow many readings of each post to keep. Default 1000.
fetchFollowersAlso track each author's follower count.
abortAfterConsecutiveFailuresStop the run if this many posts in a row cannot be read. Deleted posts do not count.
proxyConfigurationProxy for Instagram and Threads. The default works.
facebookProxyConfigurationProxy 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
}
FieldNotes
likeCount, replyCount, shareCount, viewCount, followerCountCurrent likes, comments, shares, views and followers.
likeCountDelta … followerCountDeltaChange since the previous reading.
likeCountSinceFirst … followerCountSinceFirstChange since the first reading.
observedAtWhen this run read the post.
previousAt, hoursSincePreviousWhen the previous reading was, and how many hours ago.
firstSeenAt, hoursSinceFirstWhen the first reading was, and how many hours ago.
snapshotCountHow many times this post has been read, including this run.
valuesAreLastKnown, lastKnownAttrue when the numbers come from an earlier run, and when that run was.
notFoundSinceWhen 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

StageActorWhat you get
Before: choosing creatorsInstagram Engagement Rate Calculator & AuditFollowers, median engagement rate and posting frequency per account
During: while the posts are liveThis trackerThe same posts re-read on a schedule, with growth since the last run and since tracking started, and deleted posts flagged
After: the wrap reportInstagram, Facebook, Threads & YouTube Post MetricsOne 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.