Recommended Free Tools
Use the LinkPreview API by sending a publicly reachable page URL in the q parameter, authenticating with the X-Linkpreview-Api-Key header, and treating the response as incomplete metadata rather than guaranteed truth. The service accepts GET and POST requests at https://api.linkpreview.net and normally returns JSON containing a title, description, image URL, and resolved URL.
What you need before making a request
- A LinkPreview API key created through the service’s official account and documentation flow.
- A server-side component for your integration. Keeping the key off browser JavaScript protects the credential and gives you a place to enforce authorization, quotas, caching, and response validation.
- A destination URL that is publicly reachable by LinkPreview’s crawler. Login-only pages, paywalls, CAPTCHA challenges, bot protection, IP restrictions, and pages that require JavaScript to create metadata may not parse successfully.
The documentation identifies the crawler as LinkPreview/1.6 and says it respects robots.txt. Review the current LinkPreview API documentation for account and plan requirements before deploying.
Make the minimal API request
GET with cURL
curl "https://api.linkpreview.net/?q=https%3A%2F%2Fexample.com"
-H "X-Linkpreview-Api-Key: YOUR_API_KEY"
Here, q is the URL to preview. URL-encode reserved characters when building a GET query string; in application code, let your HTTP client perform encoding instead of concatenating untrusted input.
POST alternative
The API also supports POST. Send the URL and any options in the request body using the format shown in the current documentation. POST can be more convenient when your request includes several parameters or when you want to avoid putting the destination URL in a query string.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →#1 Best Overall
Python
import requests
endpoint = "https://api.linkpreview.net/"
headers = {"X-Linkpreview-Api-Key": "YOUR_API_KEY"}
params = {"q": "https://example.com"}
response = requests.get(endpoint, headers=headers, params=params, timeout=30)
response.raise_for_status()
data = response.json()
print(data)
Node.js
const endpoint = new URL('https://api.linkpreview.net/');
endpoint.searchParams.set('q', 'https://example.com');
const response = await fetch(endpoint, {
headers: { 'X-Linkpreview-Api-Key': process.env.LINKPREVIEW_API_KEY }
});
if (!response.ok) throw new Error(`LinkPreview returned ${response.status}`);
const data = await response.json();
console.log(data);
Store YOUR_API_KEY in an environment variable or secret manager. Do not ship it in a public mobile or browser bundle.
Understand and validate the JSON response
The default response fields are:
| Field | Meaning and handling |
|---|---|
title |
Extracted page title. It may be an empty string when unavailable. |
description |
Extracted description or summary. Treat an empty value as a normal outcome. |
image |
Image URL selected by the parser. Validate it before displaying or downloading. |
url |
The URL associated with the result; compare it with the requested URL when you need to detect redirects. |
Additional documented fields include canonical URL, locale, site name, image dimensions, image size and MIME type, favicon URL and its dimensions, size, and MIME type. Request optional values with the comma-separated fields parameter, and verify that your subscription includes them. The service documents blank strings and zeroes as defaults when it cannot extract a string or numeric value, so distinguish “field unavailable” from a complete response.
Render safely
- Check the HTTP status before parsing JSON.
- Validate that strings are strings, numbers are within sensible ranges, and URLs use schemes you permit.
- HTML-escape title and description before inserting them into a page.
- Do not trust returned image URLs as safe file locations. Apply an allowlist, size limits, and content-type checks.
Request optional fields and image metadata
Use fields only for data your UI needs. Extra fields are plan-dependent. For images, the documentation lists JPEG, PNG, GIF, ICO, and WebP up to 5 MB. It recommends requesting image_size and checking dimensions or size before display. A robust pipeline can reject oversized or unexpected content, download through a server-side proxy, and cache the result. Proxying and caching images in your own secure environment also avoids exposing an end user’s IP address to a third-party image host.
Rank #2
- Used Book in Good Condition
Design for pages that cannot be parsed
LinkPreview does not promise complete data for every URL. A page can be public in a normal browser and still fail crawler extraction because of a login wall, paywall, bot check, CAPTCHA, missing standard metadata, JavaScript-only metadata, a temporary network fault, deep-link restrictions, IP filtering, or a robots.txt exclusion. Build a fallback card: show the submitted hostname and URL, use your own placeholder image, and let the user open the destination directly. Never block the rest of your application because one preview is incomplete.
Cache deliberately
LinkPreview caches requested pages. Its documentation says expiration depends on unspecified factors and may take up to a day. A source site’s metadata change therefore may not appear in your next response. Cache your own normalized result with a freshness policy appropriate to your product, and provide a refresh path for users who need a new fetch. Avoid repeatedly requesting the same URL while the upstream cache is still valid.
Handle documented errors and throttling
| Status | Documented meaning | Response strategy |
|---|---|---|
| 400 | Generic error | Log the request shape, validate the URL, and return a safe fallback. |
| 401 | Access key cannot be verified | Check the configured key and secret injection. |
| 403 | Invalid or blank key | Replace the key and ensure the header is present. |
| 423 | Target disallows access through robots.txt |
Do not retry aggressively; show a URL-only card. |
| 424 | Content blocked as potentially malicious or adult when block_content=true |
Respect the policy result and handle it as unavailable metadata. |
| 425 | Invalid response status from the remote server | Retry only with bounded backoff, then fall back. |
| 426 | Too many requests per second on one domain | Queue requests per host and slow the worker. |
| 429 | API rate limit exceeded | Honor retry guidance if supplied, use exponential backoff, and enforce local quotas. |
| 503 | Service may be unavailable during sudden bursts; temporary upstream bans are possible | Use a circuit breaker and retry later rather than looping. |
The documentation describes a general maximum of one request per second to a single domain to protect smaller sites, with exceptions for named high-throughput domains. Treat this as a service policy, not a universal guarantee for every domain or plan; contact LinkPreview if your workload needs a higher limit.
Rank #3
Retry policy
- Retry transient 425 and 503 responses, and 429 responses when your quota window permits, with exponential delays and jitter.
- Do not retry authentication errors (401 or 403) until configuration changes.
- Do not retry a robots exclusion (423) or policy block (424) as if it were a network failure.
- Cap attempts, record the target host and status, and return a fallback card after the cap.
Choose a plan and deployment model
The service homepage currently lists these plans; quotas and terms can change, so verify them before purchase:
| Plan | Listed price | Listed allowance | Use label |
|---|---|---|---|
| Free | $0/month | 60 requests per hour | Personal use |
| Basic | $8/month | 200 requests per hour | Personal use |
| Pro | $25/month | 1,000 requests per hour | Commercial use; additional fields, image processing, and usage analytics listed |
| Enterprise | $119/month | 100 requests per minute | Commercial use; additional fields, image processing, and usage analytics listed |
These are current vendor listings on LinkPreview’s homepage and pricing page, not independent usage measurements. Taxes may apply. Select by commercial-versus-personal status, required fields and image processing, quota window, and per-domain throttling—not by monthly quota alone.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchProduction checklist
- Keep the key server-side and rotate it through your secret manager.
- Normalize URLs so equivalent inputs share a cache key, while preserving the original URL for display.
- Apply SSRF protections in your own fetch and proxy layers: restrict schemes, block private network destinations, limit redirects, and cap response size.
- Set HTTP timeouts and cancellation; a slow target must not consume an unbounded worker.
- Record status codes, latency, cache hit/miss state, and parser completeness without logging API keys.
- Use per-domain queues to stay within the documented one-request-per-second policy where it applies.
- Escape all returned text and validate image MIME type, dimensions, and size.
- Provide a deterministic fallback when title, description, or image is blank.
Or skip the browser setup
If your actual requirement is a rendered screenshot rather than parsed Open Graph-style metadata, ScreenshotNeo is the first alternative to try: it removes cookie banners, newsletter popups, and chat widgets before capture, bills only clean shots, and starts with a free allowance.
One GET request returns a PNG, JPEG, WebP, or PDF. The API reports whether a result was clean, cached, failed, or blocked through X-Page-Verdict and X-Billed headers.
Rank #4
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for all options. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
FAQ
Can I call LinkPreview directly from browser JavaScript?
The documentation recommends a server-side application for browser-based products to protect the key and control access and rate limiting. A browser-facing endpoint in your application is the safer pattern.
Free tools Windows power users keep installed
One-click scans. No signup required.
Why does a preview show a title but no image?
The parser may not find a usable image, the image may exceed the documented format or 5 MB limit, or your requested fields may not be included in the subscription. Treat image absence independently from title success.
Best Value
Will changing a page’s metadata update immediately?
Not necessarily. LinkPreview says its cache expiration can take up to a day, so a later response may continue to reflect cached data.
What should I do when a URL is blocked by robots.txt?
Respect the 423 response, present a URL-only fallback, and avoid attempting to bypass the site’s crawler policy.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




