
Checked means you have source evidence, not a guess. An Actor is a hosted program that collects data. This article uses the Instagram Metrics Scraper Actor. Public version 1.0.35 accepts mode contentUrls. That mode means you supply each post URL yourself. A Reel is a short Instagram video. Put known public post or Reel URLs in startUrls.
A Task is a saved input preset. The Instagram Post Metrics Tracker is the current public Task. A run is one execution of the Actor. maxItems is the limit on how many items one run returns. The Task is only a starting input. It does not do this comparison for you.
An observation is a saved reading of a public count at a known time. The Actor returns a current observation. It does not return old counts from a past month boundary. It does not return private account statistics. It does not split paid views from unpaid views. Paid views come from ads. Unpaid views do not. It does not list every post the account ever published. You need observations you already saved.
Comparable means the same post, the same metric, the same source, and known times.
What you can compare
You can write an observed monthly change for one publication cohort when both boundaries are comparable saves. A publication cohort is a group of posts published in the same stated period. The activity period is the time when the views were counted. Keep those periods separate.
An older post can still gain views in a later month. A new post can gain views too. You separate the posts by publication date, not by which count changed. A May post can gain views in July. Those views are July activity. The cohort is still posts published before July.
Public views, plays, likes, comments, and private reach are different facts. Use one metric for both ends of a pair. This method uses public views. Plays are not views. Likes and comments are not views. Private reach is not in this public count. A view count is not a count of unique people.
Missing, rounded, or unknown exactness is not an exact boundary value. Keep those pairs out of an exact total.
Steps
- Define the month interval and the metric. Use one time zone. Write a start and an end. Use July 1 at 00:00 UTC through August 1 at 00:00 UTC as the pattern. The end time is not part of July. A post published at that instant is after the month. A post published on July 31 is inside the month. Choose one metric and keep it for both saves. A rounded screen label and an exact saved count are not the same source. A screen label is a short number shown in the app, such as 1.2K.
- Build a checked roster of known posts. Include older posts that may still gain views. A list of only July publications leaves out May and June posts. Those older posts may still gain July views. For each URL, keep the identity, the publication evidence, and a coverage note. Profile discovery is not the accepted route. Use only direct URLs for known public posts or Reels. Do not claim the roster includes every post unless you have evidence. One useful row does not prove full coverage. The current Task samples are not your posts. Replace the whole sample list. For a first check, use one known URL and set maxItems to 1.
- Use saves you already have at both boundaries. A new run today cannot recover the interval start. A baseline is the saved count at the interval start. Record the actual time of each save. A save on July 2 is late. It does not cover July 1. It does not cover the earlier hours of July 2. You can use that save only for the times it really covers. You cannot call it a July 1 baseline. You need known times and known values. An approximate screen label is not enough. Both saves must use the same count and the same source.
- Match the same post and assign a cohort. Match the same postId and the same metric source. Do not merge two rows because the captions look alike. A copied clip with a different postId needs its own review. Keep publishedAt separate from scrapedAt. publishedAt is the publication time. scrapedAt is the time of that observation. Your cohort label is not an Actor field. You assign it from checked publication evidence and your interval. Use one label only. before_month means published before the interval start. published_in_month means published inside the interval. after_month means published at or after the interval end. publication_unknown means no checked publication time. Do not fill an unknown date from the first save. The first-seen time is an observation time. It is not the publication time.
- Compute a change only for an exact full pair. A whole-month pair has exact saves at the start and the end you defined. The change is end minus start. Both numbers must be exact. Both must come from the same source. If a save time differs, write the real time. Keep that row out of the full-month total. Keep rounded pairs out of the exact total. Keep unknown exactness out of the exact total. Move them in only if you first write a clear uncertainty rule. This method does not treat a rounded label as exact. If the counter falls, mark revised_or_decreased_counter. A counter is the public number you saved. Investigate that row. Do not replace the fall with zero. Do not call it negative viewers. A lower public counter can be a revision. It is not a count of people who left.
- Treat a new post with care. The first count after publication is not a proven zero baseline. Never write zero at a month boundary when you did not observe it. You may write the change between the times you did observe. Call that change a partial interval. Keep it separate from a full-month contribution. The first-seen date cannot replace publishedAt. It cannot restore views missed before the first save. A missing observation stays a gap. Unknown publication dates, missing counts, and revised counters stay in separate rows.
- Add only eligible whole-month changes. Add changes only inside one known cohort. The pair must be comparable, and it must cover the whole month. Write how many posts you included. Write each gap and each excluded result. Do not mix a partial interval into that sum. Do not present a ratio of those sums as the whole account share. Your roster is not every post on the account. An owned monthly account report is a different source. Check its metric and its coverage before you compare it. Do not merge it into the public view sum without that check.
- Explain the result and what you do not know. Older posts can gain views after the publication month. Public counts do not show paid causes or unpaid causes. They do not show unique people. A large increase does not prove the post caused account growth. Give the cohort table and the gaps before you choose content.
Replace the sample input
The current saved Task input uses five sample URLs and maxItems 100. Delete all five samples for your own check. Do not add your URL beside the samples.
{
"mode": "contentUrls",
"startUrls": [
"https://www.instagram.com/p/DZNai6uEQux/",
"https://www.instagram.com/p/DZVGPOPlVyp/",
"https://www.instagram.com/p/DZahOsaDTnm/",
"https://www.instagram.com/p/DXl-mmCDIRu/",
"https://www.instagram.com/p/DYpL1W-jO7j/"
],
"maxItems": 100
}Use this shape for the first check. Replace the placeholder with your own public URL.
{
"mode": "contentUrls",
"startUrls": ["PASTE_ONE_KNOWN_PUBLIC_URL"],
"maxItems": 1
}A limit of 1 matches a roster of one URL. If maxItems is lower than the number of URLs, the run can omit some URLs. Still compare the output with the roster. A check with one known Reel on version 1.0.35 returned the intended post. It returned postId and the post URL. It returned profile identity and publishedAt. It returned views, likes, comments, and status. That check supports those current fields. It did not recover historical month-boundary values. Likes and comments can appear beside views. Do not mix them into the view change.
Check the output against your roster
The Actor collects rows. You do the cohort work in the steps above. The run does not build the month table for you.
After the run, open OUTPUT. Reconciliation means you match your original target roster to the dataset, item by item. providedInputs, contentUrls, inputUrls, resolvedUrls, metricRows, noPublicMetricRows, blockedRows, failedRows, statusCounts, and stopReason are aggregate counts and status totals. They are not per-URL lists. Do not infer which target failed from blockedRows or failedRows totals. Match each target to its dataset row by inputUrl, postId, postUrl, status, and statusReason. Include unavailable targets.
A supplied URL that is absent from metricRows is not a zero. The limit can omit a URL. The URL can also be blocked or failed. Read status, statusReason, and stopReason before you decide.
Keep these fields from a useful row: inputUrl, postId, postUrl, profileId, and profileHandle. inputUrl matches the source target. profileHandle is the public username. Also keep publishedAt, views, and postMetricStatus. postMetricStatus is the metric status on that row. Also keep status, statusReason, and scrapedAt. If no public metric was returned, do not invent a count.
Original fiction for a July view month
The rows below are original fiction. They are not a result from the Actor. They are not your account. They only show how to judge each kind of row.
The interval is July 1 at 00:00 UTC through August 1 at 00:00 UTC. The end time is not part of July. Each exact pair uses the same source counter at both boundaries.
P1 was published on May 20. Its cohort is before_month. Views move from 1,000 to 1,600. Both values are exact. The times are July 1 and August 1 at 00:00 UTC. The change is 1,600 minus 1,000. That is +600.
P2 was published on June 18. Its cohort is before_month. Views move from 2,000 to 2,200. The change is +200. P1 and P2 are the matched older group. The group total is 600 plus 200. That is +800. This +800 is the older-post contribution for that matched group only. It is two posts, not the whole account.
P3 was published on July 5. Its cohort is published_in_month. The first observation is July 6, with 100 views. The clock time on July 6 is not supplied. On August 1 at 00:00 UTC the count is 400. The change is 400 minus 100. That is +300. The covered time is only July 6 through August 1. That is a partial interval. There is no saved count for July 1. The post also did not exist on July 1. The time from July 5 to the first save was not observed. Do not write zero for the missing start. The +300 is not a full-month contribution.
P4 has no start count. An end count of 1,000 is present. The monthly change is unavailable. Do not put zero in the empty start. Publication evidence for P4 is not part of this fiction. Do not guess a cohort.
P5 uses the rounded labels 1.2K and 1.5K. The letter K means the screen showed a short thousands label. The fiction places those labels at the month boundaries. The labels are still not exact counts. Do not turn 1.2K into 1,200. Do not turn 1.5K into 1,500. The exact change is unknown. Keep P5 out of the exact total. Publication evidence for P5 is not part of this fiction.
P6 moves from 1,000 to 900. Both numbers are exact. The boundary times are July 1 and August 1 at 00:00 UTC. The counter fell by 100, because 1,000 minus 900 is 100. Mark revised_or_decreased_counter. Keep P6 out of the positive total until you review it. Do not call the fall negative unique people. Unique people are a different fact. Publication evidence for P6 is not part of this fiction.
P7 has no checked publication date. Its cohort is publication_unknown. It does have an exact pair, from 10 to 40. The times are July 1 and August 1 at 00:00 UTC. The change is 40 minus 10. That is +30. Do not assign P7 to older posts. Do not assign P7 to new posts. The day you first saved P7 is not its publication date.
The older group contributes +800. P3's +300 stays a partial-interval change. P7's +30 stays with an unknown cohort. Do not add 800 and 300. Do not add 30 into either cohort. Do not treat 800 divided by 800 plus 300 as an older-post share of the full month. Those rows do not cover the same interval. They are not the whole account. P4, P5, and P6 stay outside the sum.
| Post | Published | Cohort | Start boundary | End boundary | Change | Exactness | Comparison result | Gap |
|---|---|---|---|---|---|---|---|---|
| P1 | May 20 | before_month | 1,000 at July 1 00:00 UTC | 1,600 at August 1 00:00 UTC | +600 | Exact | Whole-month pair | None in the pair |
| P2 | June 18 | before_month | 2,000 at July 1 00:00 UTC | 2,200 at August 1 00:00 UTC | +200 | Exact | Whole-month pair | None in the pair |
| P3 | July 5 | published_in_month | 100 on July 6, clock time not supplied | 400 at August 1 00:00 UTC | +300 | Exact on the shorter interval | Partial interval | No July 1 baseline |
| P4 | Not supplied | Not assigned | Missing | 1,000 | Unavailable | Not a pair | Missing baseline | Do not use zero |
| P5 | Not supplied | Not assigned | 1.2K label | 1.5K label | Unknown | Rounded | Outside the exact total | Rounded labels |
| P6 | Not supplied | Not assigned | 1,000 at July 1 00:00 UTC | 900 at August 1 00:00 UTC | Fell by 100 | Exact | revised_or_decreased_counter | Outside the positive total |
| P7 | Unknown | publication_unknown | 10 at July 1 00:00 UTC | 40 at August 1 00:00 UTC | +30 | Exact | Whole-month pair, cohort unknown | Cannot assign a cohort |
Read every row before you use +800. The table shows the boundary time, the exactness, the cohort, the comparison result, and the gap. The +800 uses P1 and P2 only.
Sources & further reading
By Chronometrica · Updated
Back to top ↑

