Public social data is easy to fetch once and hard to fetch continuously. The platforms are built to notice patterns, and the pattern they notice first is many requests from one place behaving the same way.
One session per IP
Treat each residential IP as one visitor. Keep its cookies, its user agent and its request rhythm consistent, and never share a session across IPs. Playwright contexts map onto this naturally: one context, one proxy, one persistent storage state.
Match the region
Feeds, trends and even which posts are visible depend on where the visitor is. Assign IPs by country in your plan and route each market’s collection through IPs in that market. Mixing regions in one session is the fastest way to get a challenge.
Rate limits are per identity
Platform limits apply per account and per IP. Spreading the same volume over more IPs keeps each one well under the threshold. A useful target is to stay below the rate at which a motivated person could browse, and to add jitter so requests do not land on a metronome.
Handle challenges as data
Log every challenge with the IP, the endpoint and the time. The log tells you which IPs to replace, which endpoints are sensitive and whether a change you shipped made things worse. Replacing an IP takes seconds from the proxy list.
Stay public
Collect only what is visible without signing in, respect the platform’s terms and robots directives, and keep personal data handling within your own privacy obligations. The proxy changes where you appear to be; it does not change what you are allowed to do.