// alternatives

The ScreenshotOne Alternative for OG Images

ScreenshotOne is the developer-first screenshot API trusted by 4,000+ devs — free tier, 7 SDKs, custom CSS injection. If your job is just OG images, Linkshot is purpose-built — the linkshot: TailwindCSS modifier, opinionated 1200×630 defaults, one meta tag (no SDK).

Try Linkshot free7-day trial, no credit card required

What is ScreenshotOne?

ScreenshotOne is a developer-first screenshot API: “Render screenshots in one simple API call, instead of managing browser clusters, and handling all the corner cases.” They serve 4,000+ active developers, claim 99.748% uptime, and have rendered 6.1M+ screenshots.

Their pricing starts with a generous free tier (100 screenshots/mo, no credit card), then $17/mo for 2,000 (Basic), $79/mo for 10,000 (Growth), $259/mo for 50,000 (Scale). They ship SDKs in Java, Go, Node.js, PHP, Python, Ruby, and C#.

Their feature surface is broad: ad blocking, a 50,000+ cookie-banner rule database, custom CSS/JS injection, dark-mode toggle, lazy-load scrolling, geolocation, retina output. For general-purpose screenshot needs, they are an excellent default. The fit is less obvious when your only need is og:image meta-tag previews — that is the gap Linkshot fills.

Where ScreenshotOne falls short for OG images

No OG-image-specific defaults

ScreenshotOne treats every screenshot the same. There is no opinionated 1200×630 default, no template system designed for og:image meta tags, and no `linkshot:` modifier. You configure each project from scratch.

Custom CSS injection is generic, not modifier-based

You can inject CSS or use selectors_to_hide via the API, but the rules live in a separate config string that has to stay in sync with your real markup. No class modifier system that puts capture-only styles next to the elements they target.

SDK-first design adds an integration step

ScreenshotOne ships SDKs in 7 languages. Convenient if your stack matches; an extra dependency to install, update, and reason about if you only need a URL in a meta tag.

No browser extension for design iteration

ScreenshotOne has a dashboard and developer API but no extension that lets you preview OG framing live in your real browser as you design. Iteration happens in the API client.

Built for general screenshots — OG conventions live in your code

When a tool serves QA, monitoring, archiving, scraping, and OG generation equally, no single use case gets opinionated defaults. OG-specific projects pay a configuration tax on every setup.

The fundamental difference

ScreenshotOne is a general-purpose developer screenshot API. It serves QA, monitoring, scraping, visual archiving, content moderation, and OG images with a flexible API and great DX. Breadth of use cases is the product.

Linkshot is OG-image-specific by design. Defaults, the template system, the linkshot: TailwindCSS modifier, the browser extension — everything is shaped for one job. Narrowness of use case is the product.

ScreenshotOne — SDK + per-request config

import { Client, TakeOptions } from 'screenshotone-api-sdk'

const client = new Client(ACCESS_KEY, SECRET_KEY)

// Build the take-options for every OG render
const options = TakeOptions.url(pageUrl)
  .viewportWidth(1200)
  .viewportHeight(630)
  .deviceScaleFactor(2)
  .blockAds(true)
  .blockCookieBanners(true)
  .selectorsToHide([
    '.site-nav',
    '.cookie-bar',
    '#intercom-launcher',
  ])
  .format('png')

// Get a signed URL or stream the bytes
const ogUrl = await client.generateSignedTakeURL(options)

// Then put ogUrl into your <meta property="og:image">

Linkshot — one meta tag, classes on real components

{/* In your <head> */}
<meta
  property="og:image"
  content={`https://uselinkshot.com/api/og/v1/${TEMPLATE_ID}?url=${pageUrl}`}
/>

{/* In the components themselves — screenshot-only styles
    live with the elements they target */}
<nav className="linkshot:hidden">…</nav>
<div className="cookie-banner linkshot:hidden">…</div>
<div className="intercom-launcher linkshot:hidden">…</div>

<h1 className="text-3xl linkshot:text-6xl linkshot:text-center">
  {post.title}
</h1>

// ✓ 1200×630 + retina by default
// ✓ No SDK to install
// ✓ TailwindCSS classes on the actual JSX
// ✓ Edge cached on Cloudflare

Capture-only styles next to the elements they target

Add the linkshot: modifier to any element. It activates only during screenshot capture — your live page is untouched and your screenshot styles never drift from your real markup.

<nav class="linkshot:hidden"> … </nav>

Feature comparison

FeatureScreenshotOneLinkshot
OG-image-first opinionated defaults
Default 1200×630 OG dimensionsmanual
Domain allowlist (security)
TailwindCSS injection (linkshot: modifier)
Custom CSS / JS injection
Hide nav / banners via class modifiermanual selectors
Cookie-banner rule DB (third-party sites)50,000+ rules
Per-page templates without code changesmanual
Browser extension for design iteration
Real Chromium browser render
Retina / 2× pixel density
Edge generation + caching
Lazy-load / scroll handling
Dark-mode togglevia class
Geolocation / IP targetinglimited
7-language SDKs (Java/Go/Node/PHP/Py/Ruby/.NET)URL-based
PNG / JPG / WebP
PDF output
Free tier100/mo, no card
7-day trial without credit card
Entry paid tier$17/mo (2k)$9/mo
Active developers (vendor claim)4,000+growing
Uptime claim99.748%global edge

Why developers switch from ScreenshotOne to Linkshot

ScreenshotOne is excellent at being a developer-first screenshot API. The friction shows up specifically when the only screenshot you generate is an OG image — the breadth that makes ScreenshotOne compelling for a QA pipeline becomes overhead for an OG-only workload. These are the five points where the gap shows up most often.

01OG-image-first defaults

Every project that uses ScreenshotOne for OG images ends up writing the same configuration: viewport 1200×630, device pixel ratio 2, ad blocking on, cookie banner blocking on, format png, full-page off. Sometimes hide a few selectors. Repeat for the next project. Repeat when the SDK gets a new option you should probably enable.

Linkshot bakes the OG-conventional configuration into the product. The default template is 1200×630 at 2× scale with sensible OG conventions baked in. Your first OG image is one meta tag away. Override only when you actually need to.

ScreenshotOne is configurable to handle every screenshot job; that flexibility costs you setup tax on every OG project. Linkshot trades configurability for opinionated defaults — fine for OG, wrong for general-purpose screenshots.

02The TailwindCSS modifier vs custom CSS strings

ScreenshotOne supports custom CSS injection — pass a CSS string with the request and it runs against the page before screenshot. Useful and well-designed. The friction is structural: the rules live in a separate string (in your code, in your config, in your dashboard), they reference selectors that have to stay in sync with your real markup, and any component refactor that changes the selector path silently breaks them.

Linkshot replaces this with a TailwindCSS modifier. Add `class="linkshot:hidden"` to the nav element in your real component. Add `class="linkshot:text-6xl linkshot:text-center"` to the hero heading. The screenshot-only styles live next to the elements they target, in the same TailwindCSS syntax you already write everywhere else.

The cookie-banner case demonstrates the difference best. ScreenshotOne maintains a 50,000+ rule database that auto-hides cookie banners across the public web — invaluable when you screenshot URLs you don't control. Linkshot operates on your domains: hiding your own banner is one TailwindCSS class on your own div. The difference reflects the use case, not a feature gap.

03No SDK to install or update

ScreenshotOne ships SDKs in seven languages: Java, Go, Node.js, PHP, Python, Ruby, and C#. The ergonomics are excellent if you happen to be using those languages and you want type-safe API access.

Linkshot's surface is smaller: a URL. Your og:image meta tag is the integration. The same string works identically on Next.js, Astro, Remix, SvelteKit, TanStack Start, Hono, Hugo, Jekyll, WordPress, Shopify, Webflow, Framer, plain HTML, or any backend that can render a tag.

Neither is better in the abstract. SDK is right when you make programmatic API calls from server code at request time. URL is right when the integration is a markup attribute that you set once per page.

04Browser extension for design iteration

ScreenshotOne has a dashboard and a dev API. To see what your OG image will look like with a CSS rule applied, you fire a render, look at the result, edit the rule, fire again. The loop lives in the API client.

Linkshot ships a Chrome extension called Fit Check. It overlays a 1200×630 frame on your live page in your real browser, with TailwindCSS injection applied. You add a `linkshot:` class, see it update instantly, commit when it looks right. The same loop you already use for visual debugging on the rest of your site, now extended to OG capture.

For teams with a designer in the loop, the extension turns OG iteration from an API-client chore into a frontend chore.

05Different jobs, different products

ScreenshotOne explicitly positions as 'the screenshot API for developers' — a general-purpose tool serving QA, monitoring, content moderation, scraping, visual archives, OG, and more. The breadth is the product. With 4,000+ active developers and 6.1M+ screenshots rendered, it is the indie-developer favorite for that job.

Linkshot is narrower by design. The product surface (default 1200×630, TailwindCSS modifier, browser extension, OG-aware caching) only makes sense if your job-to-be-done is og:image. We trade general-purpose flexibility for OG-specific ergonomics.

If you have multiple screenshot use cases, ScreenshotOne avoids tool sprawl. If you have one specific use case — og:image — Linkshot does it with less friction.

Which one should you use?

Stick with ScreenshotOne if…

  • You need a general-purpose screenshot API (QA, archives, scraping)
  • You screenshot URLs you do not control and need the cookie-banner rule DB
  • You want a perpetual free tier (100/mo, no card)
  • You already use one of their 7 SDKs and the ergonomics matter
  • Your render volume is 2,000+/mo and per-render cost is the priority

Use Linkshot if…

  • Your only screenshot need is og:image meta-tag previews
  • You want TailwindCSS modifier classes on your real components
  • You want a $9/mo entry tier sized for indie projects
  • You want a browser extension to iterate on OG framing
  • You want opinionated 1200×630 + retina defaults out of the box

Frequently asked questions

Is Linkshot a drop-in replacement for ScreenshotOne?

It depends on what you use ScreenshotOne for. If you screenshot for monitoring, scraping, archiving, or visual QA pipelines, ScreenshotOne is the better general-purpose tool. If your only screenshot need is og:image meta-tag previews, Linkshot is purpose-built for that — TailwindCSS injection, opinionated 1200×630 defaults, no SDK to install.

Does Linkshot have a free tier?

No — Linkshot offers a 7-day free trial without a credit card, but no perpetual free tier. ScreenshotOne offers 100 screenshots per month for free indefinitely. If a free tier is non-negotiable for your hobby project, ScreenshotOne wins this dimension.

How does pricing compare?

ScreenshotOne starts at $17/mo for 2,000 screenshots ($79/mo for 10,000). Linkshot starts at $9/mo. Below ~1,000 OG renders/mo, Linkshot is roughly half the cost. Above 10,000 renders/mo, ScreenshotOne scales more cheaply per render.

Why would I prefer URL-based over an SDK?

Less to install, less to update, no ecosystem coupling. Linkshot's meta tag is just a URL — drop it in your <head> and it works identically on Next.js, Astro, Remix, SvelteKit, Hugo, Jekyll, WordPress, plain HTML, or anything else that renders a meta tag. ScreenshotOne's 7 SDKs are convenient if you already use them, but they add a dependency you have to keep current.

Can I migrate from ScreenshotOne to Linkshot in a day?

Yes — for OG-only workloads. Replace your ScreenshotOne URL in your og:image meta tag with a Linkshot URL. If you used ScreenshotOne's custom CSS/JS injection or `selectors_to_hide`, port those to TailwindCSS classes with the linkshot: modifier on the real components. No SDK swap required.

Does Linkshot match ScreenshotOne 50,000+ cookie-banner rule database?

No — and we don't need to. ScreenshotOne maintains a community-driven database of CSS rules that auto-hide cookie banners on thousands of sites. That's brilliant for general-purpose screenshots of arbitrary URLs you don't control. Linkshot operates on your domains (you allowlist them), so you control the markup — adding `linkshot:hidden` to your own cookie banner is one class. If you screenshot third-party sites you don't control, ScreenshotOne is the right pick.

What about general-purpose screenshots (monitoring, archives, scraping)?

Linkshot does not target those use cases. ScreenshotOne does — they have geolocation, lazy-load handling, dark-mode toggles, wait-actions, and the SDK ergonomics for QA pipelines and content moderation. If you need screenshots beyond og:image, ScreenshotOne is more general-purpose.

Is ScreenshotOne $17/mo for 2,000 a better deal than Linkshot $9/mo?

It depends on volume. ScreenshotOne is cheaper per render at 2,000+/mo. Linkshot is cheaper in total cost below ~1,000 renders/mo, which is where most OG-only workloads sit (most posts only need to be rendered once and then cached for weeks). If you actually use 2,000+ unique renders per month, ScreenshotOne wins on price; if you sit at a few hundred, Linkshot wins.

Ready to switch?

Add your domain, drop one <meta> tag, ship your first OG image in minutes — no SDK.

7-day free trial · no credit card required