Skip to main content

Detecting fake Instagram engagement with API data

· 3 min read
Product documentation and integration guides

Every influencer deal, marketplace onboarding and UGC campaign eventually asks: is this engagement real? No single metric proves it — but a short battery of API checks catches most purchased engagement, because fakes are cheap and APIs see the seams. This is the checklist, endpoint by endpoint.

Signal 1: liker composition​

The likes endpoint returns a ~100-liker sample. Fake likers cluster into recognizable shapes:

  • high share of faceless accounts: default avatar, no posts, private
  • follower counts bunched at round numbers (100, 500, 1000)
  • usernames with digit-suffix patterns
from getsocialapi import Client

ig = Client(api_key="gsa_live_...").instagram
likers = ig.media_likers(shortcode)["users"]

faceless = sum(1 for u in likers
if u.get("is_private") and not u.get("profile_pic_url"))
print("faceless share:", faceless / len(likers))

A healthy public post's likers are mostly public, avatar-bearing accounts. A >40% faceless share on a "lifestyle" account is a conversation, not a coincidence.

Signal 2: engagement ratio sanity​

Cross the media card counters with the profile:

  • like-to-follower ratio far above the account's historical baseline on isolated posts (bought bursts concentrate on few posts)
  • comment-to-like ratio below ~0.5% with high likes (comments cost more than likes — purchased packages reflect that)

Compute the baseline from the account's own grid via user media — you need ~12 posts for a stable median.

Signal 3: comment content patterns​

Full comment export is one walker (see the comments pagination guide). Fraud tells:

  • emoji-only / generic praise ("🔥🔥", "Great post!") share
  • duplicated texts across different commenter accounts
  • commenters whose own accounts are empty
  • declared comment_count far above collectable + child comments — the gap is where filtered spam lived

Signal 4: the About screen​

The about-this-account endpoint adds the trust trio:

  • recent joined_at on an account claiming brand history
  • multiple former_usernames — repurposed handle
  • accounts_with_shared_followers clustering — bot farms share audiences by construction

Scoring it​

score = 0
score += faceless_share > 0.4 # liker quality
score += er_outlier > 3 # burst detection
score += generic_comment_share > 0.6 # comment quality
score += joined_recently # account age
# 0-1: normal variance; 2: review; 3-4: high fraud probability

The whole battery is ~20 API calls per account — profile, about, media page, one likes sample, one comments page. At influencer-vetting volume it costs less than one disputed invoice.

Every signal here is observable through public endpoints, no cookies, no account access — getsocialapi.com, first 100 calls free.

Build with GetSocialAPI​

Explore Instagram API for capabilities, pricing and integration examples. Create an account to start with 100 free calls, or follow the quickstart.