Guides

How to take screenshots of Social Media with Urlbox

Starting point options for screenshotting Instagram, X/Twitter, Facebook, and TikTok with the Urlbox Screenshot API.

Arnold Cubici-Jones
Arnold Cubici-Jones
February 25, 2026

Quick Reference

PlatformNeeds POV?Key Options
InstagramYespov, min_size_bytes, retry_on, delay, scroll_delay, wait_until
X/TwitterNomin_size_bytes, retry_on, delay, scroll_delay, wait_until
FacebookYespov, min_size_bytes, retry_on, delay, scroll_delay
TikTokNomin_size_bytes, retry_on, delay, scroll_delay

Looking for a no-code solution? CaptureDeck lets you screenshot social media at scale without writing any code.

Social media platforms are notoriously challenging to screenshot programmatically. They use aggressive bot detection, dynamic JS loading, login walls, and constantly changing markup. Here we have put together some configurations that should give you a reasonable starting template.

Important: These configurations work as of February 2026. Screenshotting social media platforms is a game of whack-a-turnstile. There are regular updates to bot detection methods, so you may need to tweak these over time, and we might do too. If something stops working, get in touch, and we will help you through it.

Why Social Media Screenshots Are Tricky

Instagram screenshot comparison - login wall on the left, successful capture on the right

You've probably already discovered some of these issues:

  • Bot detection: Platforms like Instagram detect headless browsers and block aggressively, giving you bot detection turnstiles, captcha, or similar undesirable results when screenshotting.
  • Dynamic content: Infinite scroll, lazy loading, and client-side rendering can make screenshots look blank, not visually settled, or have missing page assets like images/videos.
  • Login walls: Some content requires authentication to view, so you get redirected to a login page or get obstructive modals popping up.

The configurations below try to work around these issues using Point of View, delays, and retry logic. They are not bulletproof, but they work, and expose you to some useful options you may not have tried before.

Early Access Pricing

Point of View is a Urlbox feature that makes your requests appear as if from a regular user, helping bypass bot detection on platforms like Instagram and Facebook.

The pov and retry_on options used in these examples are currently in early access. These features will incur significant additional costs once fully launched. Using pov: "hidden" will incur a 10x multiplier on the number of renders used by a request and is available from our HiFi plan and above. Contact us for current pricing details.

How to Screenshot Instagram

Instagram aggressively blocks datacenter IPs and headless browsers, so this configuration uses Point of View (pov: "hidden") combined with delays, retry logic, and a minimum file size check to ensure you get real content rather than a login wall. Point of View makes your request appear as if from a regular doom-scroller rather than a datacenter.

{
  "url": "https://www.instagram.com/p/DUYpWx4jm0I/",
  "full_page": true,
  "pov": "hidden",
  "pov_country": "us",
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
  "delay": 4000,
  "wait_until": "mostrequestsfinished",
  "scroll_delay": 1000,
  "retry_on": "small_size,timeout,5xx,4xx",
  "max_retries": 3,
  "min_size_bytes": 1500000,
  "retry_delay_ms": 5000,
  "press_escape": true,
  "click_accept": true,
  "hide_cookie_banners": true
}

Some Context on the options used:

OptionDescription
pov: "hidden"Uses a Point of View to bypass bot detection. Makes your request appear as if from a regular doom-scroller!
pov_country: "us"Specifies which country to use for the Point of View.
delay: 4000Gives time for Javascript on the page to settle after requests finish
min_size_bytes: 1500000Checks the minimum file size to catch blank or error pages (~1.5MB for Instagram)
retry_on: "small_size,timeout,5xx,4xx"Retries the render when it's smaller than min_size_bytes, the request times out, or returns an error
max_retries: 3Maximum number of retry attempts when retry_on is applied.
retry_delay_ms: 5000The time to wait between retries in milliseconds when retry_on is applied.
wait_until: "mostrequestsfinished"Allows page assets to load by waiting for most network requests to finish
scroll_delay: 1000When scrolling the page in steps, this delays each scroll to allow lazy-loaded content to appear
user_agentThis tells our browser who to act as. It's often better to let us handle this, but if you're finding yourself blocked then mixing this up could help with bot fingerprinting
click_accept: trueAccepts cookie consent banners
hide_cookie_banners: trueRemoves cookie and other bothersome banners using common heuristics
press_escape: truePresses the ESC key to help dismiss modals

For more information on the options used, consult our docs or contact us, and we'll do our best to help.

Successful Instagram post screenshot

How to Screenshot X (Twitter)

X is more forgiving than Instagram - no Point of View needed for most public profiles and tweets. This configuration uses delays, wait_until, and retry logic to handle dynamic content loading.

{
  "url": "https://x.com/karpathy/status/1617979122625712128",
  "full_page": true,
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
  "wait_until": "mostrequestsfinished",
  "delay": 4000,
  "scroll_delay": 1000,
  "retry_on": "small_size,timeout,5xx,4xx",
  "retry_delay_ms": 5000,
  "max_retries": 3,
  "min_size_bytes": 10000,
  "press_escape": true,
  "click_accept": true,
  "hide_cookie_banners": true
}

Tip: For individual tweets, consider using Twitter's oEmbed to get clean embed HTML, then screenshot that with Urlbox's HTML rendering mode.

Successful X/Twitter post screenshot

How to Screenshot Facebook

Facebook requires Point of View (pov: "hidden") for reliable results, combined with cookie banner handling to dismiss consent dialogs. Public pages and posts can usually be captured with this configuration.

{
  "url": "https://www.facebook.com/AnthropicAI/",
  "pov": "hidden",
  "full_page": true,
  "delay": 2000,
  "scroll_delay": 800,
  "retry_on": "small_size,timeout,5xx,4xx",
  "max_retries": 3,
  "retry_delay_ms": 2000,
  "min_size_bytes": 50000,
  "click_accept": true,
  "press_escape": true,
  "hide_cookie_banners": true
}
Successful Facebook page screenshot

How to Screenshot TikTok

TikTok is surprisingly cooperative for public content and works without Point of View. This configuration uses delays, scroll handling, and retry logic to capture content reliably.

{
  "url": "https://www.tiktok.com/@theprimeagen/video/7251695355211926826",
  "full_page": true,
  "delay": 2000,
  "scroll_delay": 800,
  "retry_on": "small_size,timeout,5xx,4xx",
  "max_retries": 3,
  "min_size_bytes": 50000,
  "retry_delay_ms": 2000,
  "click_accept": true,
  "press_escape": true,
  "hide_cookie_banners": true
}
Successful TikTok video screenshot

General Tips

Use retries

Social platforms can be flaky, they often don't load page assets, block requests, or redirect to login pages. Using retry_on and Setting max_retries to at least 3 helps catch transient failures:

{
  "max_retries": 3,
  "retry_on": "small_size,timeout,5xx,4xx",
  "retry_delay_ms": 5000 // time to wait before retrying, which helps with rate limit caused blocking
}

Do also use min_size_bytes. Login and blank pages are typically much smaller than real content pages, and can sometimes be fixed by just trying again, so its always worth retrying if your screenshot is suspiciously small.

Note: Using retry_on can significantly increase response times. Each retry adds the base render time plus retry_delay_ms, so a request with 3 retries and a 5 second delay could take considerably longer than a single render. For time-sensitive use cases, consider using webhooks or the async endpoint for asynchronous delivery instead.

These options help by clicking accept on cookie banners, finding and removing banners by common heuristics, and pressing the ESC key:

{
  "click_accept": true,
  "hide_cookie_banners": true,
  "press_escape": true
}

Troubleshooting Common Errors

Turnstiles and bot detection

If you're seeing captchas, "prove you're human" challenges, or login walls, use pov: "hidden" to use Point of View. This makes your request appear as if from a regular user rather than a datacenter.

Page assets not loading

If your screenshots have blank images, missing content, or unsettled layouts, adjust your timing options:

  • Increase delay to give JavaScript more time to settle after requests finish
  • Increase scroll_delay to let lazy-loaded images appear as the page scrolls
  • Use wait_until: "mostrequestsfinished" or requestsfinished to wait for network requests to complete before capturing

Limitations

These configurations are designed for public content. Results may vary for:

  • Private accounts or posts
  • Age-restricted content
  • Content that requires login to view

Getting Help

If you're still having trouble after trying these configurations, contact us at [email protected] or click the chat button on our site. It helps if you include:

  1. The URL you're trying to screenshot
  2. The options you're using
  3. What you're getting back (status code, error message, or the screenshot output)

We'll do our best to help you get it working.

Free Trial

Ready to start rendering?

Designers, law firms and infrastructure engineers trust Urlbox to accurately and securely convert HTML to images at scale. Experience it for yourself.

7 day free trial.No credit card required.