feedback_required: how to recover from Instagram's longer block in instagrapi
Maintained by the instagrapi contributors · Library on GitHub
Updated
A worker that has been running cleanly for hours starts raising instagrapi.exceptions.FeedbackRequired: feedback_required on every action. You sleep, retry, and the same error fires again. You rotate the proxy and it still fires. You restart the script with a fresh session dump and it still fires. This is the moment most teams realise that feedback_required is not a network problem and not a session problem — it is Instagram’s way of telling you that the account itself has tripped a behavioural threshold, and there is no immediate fix because the block is not on the IP, the cookie, or the device. It is on the account, and it is going to last for hours rather than minutes.
This page is specifically about recovering from FeedbackRequired once you are already in it, and shaping behaviour so the account stops re-triggering it on resume. We will look at how the symptoms differ from the soft please_wait_a_few_minutes rate limit, the exact frame in instagrapi that raises the exception, the three behavioural signals Instagram’s risk model actually weighs (which together explain almost every production hit), and a recovery sequence that — critically — starts with stopping the worker rather than retrying it. The Deep dive at the end covers Instagram’s behavioural fingerprinting in more detail and the warmup tactics that materially shorten time-to-recovery on fresh or recently-blocked accounts.
Symptoms
The defining trait of FeedbackRequired is duration. Where please_wait_a_few_minutes clears in five to thirty minutes and lifts on the same client and IP, feedback_required lasts hours and survives across proxy rotation, session re-dump, and even script restart. The block is bound to the Instagram account, not to the network identity, which is why every recovery technique that worked for the soft rate limit fails here.
- The exception fires on a previously-good action and then continues firing on every retry, regardless of sleep length.
- Failure is action-specific: follows, unfollows, and likes break first, while profile lookups and media-info calls often keep working for hours after the block lands.
cl.last_response.json()['message']typically contains a phrase likeAction BlockedorWe restrict certain activity to protect our community.- Switching the proxy or restarting the process does not lift it — the same account still raises the exception from a brand-new IP and a fresh session.
- Recovery is measured in hours, not minutes. Six hours is the floor for light hits; one to three days is normal for repeat offenders.
Real-world traceback
Traceback (most recent call last):
File "follower.py", line 22, in <module>
cl.user_follow(target_pk)
File ".../instagrapi/mixins/user.py", line 312, in user_follow
return self._call_api(...)
File ".../instagrapi/mixins/private.py", line 295, in parse_feedback_response
raise FeedbackRequired(message=feedback["message"])
instagrapi.exceptions.FeedbackRequired: feedback_required
The frame that matters is instagrapi.mixins.private.parse_feedback_response, which is the dedicated parser for the feedback_required envelope — separate from the soft-limit handler that raises PleaseWaitFewMinutes. The library splits these on purpose: the two responses look superficially similar at the HTTP layer, but they correspond to very different recovery behaviours, and conflating them in client code is one of the most common reasons a worker escalates from a recoverable soft limit into a multi-day account hold.
Why it happens
Three signals dominate the risk score that flips an account into feedback_required. Knowing which one tripped tells you whether to shorten the loop, change the action mix, or warm the account up before resuming.
1. Behaviour-pattern flag
The single biggest cause is action shape, not action volume. Instagram’s anti-abuse model targets specific patterns rather than raw counts: bursty mass-follow runs, mass-unfollow cleanups, like-storms across hundreds of posts in a short window, and copy-paste comment campaigns. A worker doing 200 follows in an hour with no other activity will trip feedback_required long before a worker doing 200 follows interleaved with profile reads, story views, and media fetches over the same hour. The pattern matters more than the total — which is why “I was well under the rate limit” is a common and misleading complaint when this error first hits.
2. Fresh account with non-organic activity
Accounts younger than about a month carry a substantially tighter risk budget than aged accounts, and any non-organic burst on a fresh account fires feedback_required faster than the same activity on a year-old profile. “Non-organic” here means anything that does not look like an interactive user session — mass follows from a brand-new account with no posts, no profile picture, and no inbound follows is the canonical trigger. Even modest automation (twenty follows an hour) will trip the block on an account that has not been warmed up.
3. Cumulative soft-limit hits
The escalation path from please_wait_a_few_minutes into feedback_required is real and approximately countable: three or more soft-limit events on the same account inside an hour is roughly where the risk score crosses the threshold for the longer hold. This is why aggressive immediate-retry loops that ignore the soft limit are so destructive — every retry that lands inside the cooldown window pushes the account closer to the hard block, and the hard block lasts an order of magnitude longer than the soft one would have.
Fix in instagrapi
The recovery sequence for feedback_required is unusual: the first step is to stop, not to retry. Auto-retry is the wrong reflex here — every retry that lands during the block extends the block.
-
Stop the worker and wait at least six hours. The catch handler should halt the process, not sleep-and-retry. Six hours is the empirical floor; if you are inside the first hour, you are definitely too early. Log the timestamp so the resume schedule is unambiguous.
from instagrapi.exceptions import FeedbackRequired import sys, time try: cl.user_follow(target_pk) except FeedbackRequired: print(f"feedback_required at {int(time.time())} — halt for 6+ hours") sys.exit(1) -
Halve batch sizes and double sleeps on resume. Resuming with the original cadence almost always re-trips the block within minutes. The cheapest effective change is to cut the action batch in half and double the inter-call sleep, then re-tune from there over several days. If the worker was doing 200 follows an hour, drop to 100, with at least 30 seconds of jitter between calls.
-
Audit the action mix, not just the rate. Pure follow loops, pure unfollow loops, and pure like loops are all higher-risk shapes than mixed traffic. Interleave with profile lookups, story views, media reads — the kind of calls a real session would make alongside the action you actually care about. Stop mass-liking entirely while the account is still in the recovery window; likes are the cheapest signal for the model to score.
The combination that works in production is six-plus hours of full halt, a halved-and-doubled cadence on resume, and a mixed action profile. Skipping any one of those three will usually re-trigger feedback_required inside the first day back.
Deep dive
Instagram’s behavioural fingerprinting weighs three rough axes — action diversity, action timing, and account age — and produces a single risk score per account that is updated continuously. feedback_required is what fires when the score crosses a threshold; please_wait_a_few_minutes is what fires further down the same scale. The threshold is not fixed across accounts, which is why two workers running identical code against two different accounts will hit feedback_required at very different points: an aged, posted-on, real-follower account absorbs significantly more automation before the score crosses than a brand-new account does.
Account warmup is the single most cost-effective lever for new-account workers. A week of light, manual-feeling activity — a profile picture, a few posts, a small number of follows of obviously-related accounts, some inbound activity — moves the threshold materially upward, and pays for itself within the first day of automated work because the soft and hard limits both fire later. Warmup is not a guarantee; it is a multiplier. Combined with the halved-and-doubled resume cadence above and a mixed action profile, it is what separates accounts that recover from feedback_required cleanly from accounts that bounce straight back into the block on day two.
Related errors
- please_wait_a_few_minutes: instagrapi rate limit and how to recover please_wait_a_few_minutes is Instagram's soft rate limit. instagrapi raises PleaseWaitFewMinutes — sleep, slow down, rotate proxy, persist.
- proxy_address_is_blocked: how to recover when Instagram banned the IP ProxyAddressIsBlocked means Instagram has flagged the IP. instagrapi raises this when the proxy/residential address is unusable — rotate or replace.
Related guides
- Configuring proxies in instagrapi: HTTP, SOCKS5, and residential setups Configure HTTP and SOCKS5 proxies in instagrapi (Python). Residential vs datacenter, per-account pinning, and rotating without breaking sessions.
- Persisting instagrapi sessions: file, Redis, and Postgres patterns Reuse instagrapi login sessions across runs and processes: dump_settings, load_settings, and storing the session blob in Redis or Postgres.
- Instagram scraper in Python: a working setup with instagrapi Build a working Instagram scraper in Python using instagrapi. Fetch users, posts, stories, hashtags; store JSON; respect rate limits.
Frequently asked
How long does feedback_required last?
Hours to days. Light hits clear in 6–12 hours; account-level holds last 1–3 days. The block is account-bound, so proxy rotation alone won't lift it.
What's the difference between feedback_required and please_wait_a_few_minutes?
please_wait_a_few_minutes is a 5–30-minute soft cooldown. feedback_required is a longer suppression triggered by repeated rate-limit hits or specific anti-abuse signals.
Can I retry through feedback_required?
No — retry loops escalate. Stop the script, wait at least 6 hours, change behavior (slower, residential proxies, smaller batches), then resume.
Why does feedback_required hit even with proxies and pacing?
Account-level signals dominate proxy-level. Mass follow/unfollow, like-spam patterns, and very-fresh accounts trigger feedback_required regardless of network setup.
Skip the infra?
Managed Instagram API — same endpoints, sessions and proxies handled.
Try HikerAPI → Full comparison