Three picture cards connect to two groups of shape tokens and a grid.

You can do this work in a spreadsheet with checked public counts. If you manage the accounts and need private shares, saves, or unique reach, use the account owner’s records for those measures. Keep that analysis separate from a comparison based on public likes, comments, and views.

This guide concerns unequal numbers of sampled posts across Instagram accounts. It does not set a universal good engagement rate. It also does not treat a larger sample as proof of better account performance.

1. Choose what the average must describe

A public question asks for average likes, comments, views, and shares over six months. That wording raises two separate needs: a defined publication period and a clear meaning for “average.” The supplied evidence contains one such question, not a measure of wider demand. Public question, retrieved August 11, 2026.

Before you collect counts, write the decision your report must support:

  1. Typical sampled post: Give each eligible post the same weight when you average post rates.
  2. Typical sampled account: Calculate one stated summary per account. Then give each included account the same weight.
  3. All observed views: Add eligible interactions and views separately. Then divide the interaction total by the view total.

An eligible post is a post that meets your selection rules and has usable values for the calculation. State those rules before you inspect the results.

For this method, define public interactions as likes plus comments. An interaction count records actions. It does not count distinct people. One person can contribute more than one action.

Use this label throughout the report: likes-plus-comments rate by views. The numerator is the interaction count you divide. The denominator is the view count you divide by.

A result of 10% means 10 recorded likes and comments per 100 recorded views. It does not mean that 10% of viewers engaged. Neither count establishes a unique audience.

2. Fix the account list, post list, and observation rules

Write the account list before you collect the data. Save the reason each account belongs in the comparison. Then define the content format, publication period, and post age rule.

For a six-month request, record the exact start and end dates. Decide whether those dates select posts by publication date. That differs from measuring interactions added during those six months.

A count observed today for a post published during the period does not show how many interactions occurred within the period. The checked Actor contract has no historical boundary count field. A current reading therefore cannot supply a past count at the start or end date.

Keep these records separate:

  1. The intended account list and publication period.
  2. The known posts supplied for each account.
  3. The posts actually observed.
  4. The posts eligible for each calculation.

Do not call a known-post list a complete account archive. Record unequal coverage. Two known posts from one account and twenty from another may reflect different collection coverage, different publishing activity, or both. The counts alone do not establish the cause.

Choose a comparable content format. For example, you can limit the comparison to checked Reels. Also choose a post age rule. Post age is the time between publication and observation. Save both times so readers can assess the difference.

If you only have current readings from posts of different ages, report that limit. Do not present them as readings taken at the same post age.

Before you combine view-based rates, check that the readings support the same question. Use the view metric comparability guide for definition checks. A matching field name alone does not establish that two readings can be combined.

3. Collect the counts and save a checkable record

For a small list, you can record the available public counts by hand. Save the post link, account identity, publication time when available, and observation time beside each reading.

For a larger known-post list, the documented Instagram Metrics Scraper accepts direct content URLs. An Actor is a hosted data collection program. The reader still checks the rows and calculates the comparison.

The public contract checked on October 25, 2026, documents direct content collection with `mode` set to `contentUrls`. It also documents separate profile discovery inputs. Profile discovery does not establish that a complete six-month archive is available. Public build 1.0.35 contract.

This small input matches the supplied schema:

json
{"maxItems":1,"mode":"contentUrls","startUrls":["https://www.instagram.com/reel/DIwcCZgxVZP/"]}
3. Collect the counts and save a checkable record

Replace the sample URL with one intended public post or Reel URL. The value `maxItems` limits the total number of output rows. A cap of 1 is suitable for this one-link input. It would limit a larger comparison list to one row.

For the full collection, supply the intended known-content list and choose an appropriate cap, or omit the optional cap. Record the choice. The input above is a valid shape from the frozen evidence. No run was made for this guide.

The checked contract documents post identity, account identity, public counts, observation time, and metric quality fields. Save the following information in your working table. Some columns come from the Actor. Others are records you create.

3. Collect the counts and save a checkable record
Saved informationActor field or reader recordPurpose
Submitted address`inputUrl`Trace the reading to its input
Stable post identity`postId`, `postUrl`Match the intended post and check duplicates
Account identity`profileId`, `profileHandle`Assign the checked post to an account
Publication time`publishedAt`Check the publication period and post age
Observation time`scrapedAt`Record when the counts were read
Public counts`likes`, `comments`, `views`Keep the source values
Metric quality`postMetricStatus`Check availability and precision
Collection result`status`, `statusReason`Keep failed or partial readings visible
Selection reason and formatReader recordExplain why the post belongs in the sample
Calculation eligibilityReader recordState which calculations can use the row
Exclusion reasonReader recordExplain each excluded reading
Calculated interactions and rateReader recordKeep the formula beside its inputs

The contract documents these fields; it does not guarantee a usable value in every row. Only `inputUrl`, `status`, and `scrapedAt` are required by the supplied output schema. Documented output contract.

Keep one selected observation per post for this comparison. If you retain repeated readings, identify which reading enters the calculation. Otherwise, one post can enter the sample more than once.

4. Check missing values, zero values, and precision

Check each source row before you calculate an average. A successful collection status alone does not establish that every required metric is available.

The field `postMetricStatus` records quality information for individual metrics. Its availability states include `present`, `unavailable`, and `not_attempted`. Its precision labels include `exact`, `display_rounded`, `likely_rounded`, `unavailable`, and `unknown`. Precision describes how exact the reported number is. Availability describes whether a reading exists. Keep those two checks separate. Metric status schema.

Use these calculation rules:

  1. Keep a recorded numeric zero as zero.
  2. Keep a missing or `null` value as missing.
  3. Require usable likes and comments before adding them.
  4. Require a usable, positive view count before calculating a rate by views.
  5. Use counts from the same selected observation.
  6. Record excluded rows and their reasons.

If likes are available but comments are missing, the likes-plus-comments total is unavailable. Do not quietly substitute likes alone.

If interactions are zero and views are positive, the calculated rate is zero. If views are zero, the rate is undefined. Mark it unavailable. Do not record an undefined rate as 0%.

A post can support a raw interaction summary while lacking the views needed for a rate. Keep those sample sizes separate. For example, an account may have more posts eligible for its interaction mean than for its view-based rate.

Rounded counts also need a rule. You can exclude rounded readings from an exact-count comparison or retain them with a clear qualification. Do not describe a rate based on rounded counts as exact. Treat small differences that the count precision cannot resolve as unresolved.

The documented dataset does not provide private reach, saves, or shares. Do not add zero-filled columns for those measures. Do not import the Facebook reactions-and-shares formula from the Facebook public engagement guide into this Instagram calculation. This method uses its declared Instagram numerator: likes plus comments.

5. Build the account table before the combined summary

Calculate the account results first. This keeps a large account sample from hiding a small one.

The mean is the sum of values divided by their number. The median is the middle value after you sort the values. If there are two middle values, average those two values.

For each account, report the mean and median likes and comments if those separate measures answer the request. Show the valid post count for each measure. Do the same for views where usable readings exist.

Then report the mean and median combined interactions. These describe recorded actions per sampled post. They are counts, not percentages.

For each rate-eligible post, calculate:

Post rate = (likes + comments) ÷ views × 100

For each account, calculate the pooled account rate:

Pooled account rate = sum of eligible interactions ÷ sum of eligible views × 100

“Pooled” means that you combine the counts before you divide. It differs from averaging the individual post percentages. A post with more views contributes more to the pooled denominator.

Your account table should show:

  1. Known post count.
  2. Interaction-eligible post count.
  3. Rate-eligible post count.
  4. Missing and excluded counts, with reasons.
  5. Mean and median raw counts, with their valid sample sizes.
  6. Mean and median post rates, if required.
  7. Pooled account rate, with summed interactions and views.

An account with no eligible rate rows has an unavailable account rate. It does not have a zero rate. Exclude it from the equal-account rate average and state how many intended accounts remain outside that calculation.

A one-post account summary must stay visibly labeled as one post. Its mean and median can match, but that does not establish its usual performance.

6. Work through one original fictional example

This entire worked example is original fiction using exact invented counts. It is not an Actor result or a measured campaign. All three posts meet the example’s selection and quality rules.

The example supplies combined likes-plus-comments counts. It does not supply separate like and comment counts, so separate averages cannot be calculated.

6. Work through one original fictional example
AccountPostLikes plus commentsViewsPost rate
AA11010010%
AA22020010%
BB1501,0005%

The post calculations are:

  1. A1: 10 interactions ÷ 100 views × 100 = 10%.
  2. A2: 20 interactions ÷ 200 views × 100 = 10%.
  3. B1: 50 interactions ÷ 1,000 views × 100 = 5%.

For A, the mean interaction count is (10 + 20) ÷ 2 = 15 interactions per post. Its median is also 15. Its pooled account rate is (10 + 20) ÷ (100 + 200) × 100 = 10%.

For B, the mean and median are both 50 interactions per post. Its pooled account rate is 50 ÷ 1,000 × 100 = 5%. These describe its one sampled post.

6. Work through one original fictional example
AccountKnown postsRate-eligible postsMissing or excluded postsMean interactions per postMedian interactions per postEligible viewsPooled account rate
A220151530010%
B11050501,0005%

The zeros in the missing column are explicit facts of this fictional example. They are not replacements for unknown coverage.

Now calculate three different summaries.

Equal-account mean of pooled account rates:

(10% + 5%) ÷ 2 accounts = 7.5%.

Each account contributes one rate. A’s two posts do not give A twice B’s weight.

Pooled exposure rate across all eligible posts:

(10 + 20 + 50) interactions ÷ (100 + 200 + 1,000) views × 100 = 80 ÷ 1,300 × 100 ≈ 6.15%.

Here, exposure means recorded views. It does not mean unique people. B contributes 1,000 of the 1,300 views, so its lower rate has more weight in this result.

Equal-post mean of post rates:

(10% + 10% + 5%) ÷ 3 posts ≈ 8.33%.

Each post contributes one rate. A contributes two of the three rates because it has two sampled posts.

Keep all three labels and units. None is a unique-audience engagement rate. B has more interactions on its one sampled post, while A has the higher observed rate by views. Neither fact proves that an account’s strategy caused the difference.

7. Check the result and choose the next decision

Before you deliver the comparison, complete these checks:

  1. Recalculate a few post rows by hand, including any zero numerator.
  2. Confirm that pooled interactions and pooled views use exactly the same eligible rows.
  3. Confirm that each account enters the equal-account summary once.
  4. Check for duplicate post identities and repeated observations.
  5. Keep accounts with unavailable rates visible outside the combined rate calculation.
  6. Review whether one account or one large post supplies most of the pooled views.
  7. Keep formulas, eligible counts, collection times, and exclusions beside the results.

Also compare the conclusions under the aggregation rules. Aggregation means combining several observations into one summary. A change in the result can come from the weight each rule gives the observations.

Do not select whichever calculation makes the preferred account look best. Use the calculation that answers the stated decision. If the decision changes when you change the rule, explain why. Request more comparable observations when the current sample does not support the decision.

Public counts do not prove organic-only delivery, unique reach, customers, or sales. The proposed workflow helps you describe the observed sample. It does not establish a cause or a stable account ranking.

Sources & further reading

By Chronometrica · Updated

Back to top ↑