# Open Graph Scraper — Link Previews, OG Images & Meta Tags (`intelscrape/open-graph-scraper`) Actor

Open Graph Scraper: get the link preview of any URL in bulk: og:title, og:description, og:image, Twitter Card tags, title, meta description, canonical, favicon, oEmbed and JSON-LD types, with a preview score and a broken-image check. No browser, no API key. Pay per URL.

- **URL**: https://apify.com/intelscrape/open-graph-scraper.md
- **Developed by:** [IntelScrape](https://apify.com/intelscrape) (community)
- **Categories:** SEO tools, Developer tools, Social media
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Open Graph Scraper — Link Previews, OG Images & Meta Tags

![Open Graph Scraper — Link Previews, OG Images & Meta Tags](https://api.apify.com/v2/key-value-stores/hRabN9WfDGrT4nSvV/records/open-graph-scraper-banner.png)

🇨🇳 **Open Graph 链接预览采集器**：批量获取任意网址的链接预览信息：og:title、og:description、og:image、Twitter Card、标题、描述、canonical、favicon、oEmbed 和 JSON-LD 类型，并给出预览评分和图片失效检查。无需浏览器，无需 API 密钥，按网址付费。

🇸🇬 **Pengikis Open Graph**: pratonton pautan pukal untuk mana-mana URL: og:title, og:image, Twitter Card, tajuk, penerangan meta, canonical dan favicon, dengan semakan imej rosak. Tiada kunci API.

#### 🤖 NEW: Connect This To Your AI!

Use this actor from Claude, ChatGPT, Cursor or any MCP client through the **[IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace)**, or call it directly over the Apify API.

#### 🏆 Featured Bots by IntelScrape

- [Skip Trace Pro](https://apify.com/intelscrape/skip-trace-pro)
- [TruePeopleSearch Scraper](https://apify.com/intelscrape/truepeoplesearch-scraper)
- [TikTok Email Scraper](https://apify.com/intelscrape/tiktok-scraper)
- [Amazon Product Reviews Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)

⚡ Works with n8n, Make, Zapier, Google Sheets and the Apify API.

![price](https://img.shields.io/badge/price-%241%20per%201K%20URLs-blue) ![billing](https://img.shields.io/badge/billing-pay%20per%20URL-green) ![API key](https://img.shields.io/badge/API%20key-not%20required-brightgreen) ![browser](https://img.shields.io/badge/browser-not%20needed-orange)

**Bulk link-preview data and share-readiness audit: Open Graph, Twitter Card and core meta tags with a broken-image check.**

> **Honest coverage & billing:** JavaScript-only tags are not seen (same as social networks). You pay only for results actually delivered, and a built-in cost guard stops the run at your max-charge limit.

🌍 Built for teams in the **US, China and Singapore**, and anyone who needs this data in a spreadsheet or pipeline.

⭐ Found it useful? Please leave a review; it helps others find it.

⚖️ **Lawful business use only.** Collect public data only, and comply with the source site's terms, copyright and data-protection laws (GDPR, CCPA, China PIPL, Singapore PDPA).

*Examples below are illustrative; names and values may be fictional or out of date.*

### What is Open Graph Scraper?

Every time a link is shared on Slack, LinkedIn, X, WhatsApp or iMessage, the preview comes from a few meta tags: og:title, og:description and og:image. When they are missing or the image is broken, the link looks like spam. **Open Graph Scraper** reads those tags for any list of URLs, checks that the preview image actually loads, and scores each page, so you can build link previews in your own app or audit thousands of pages for share-readiness in minutes.

### What does it do?

- **All Open Graph tags**: title, description, image (+alt, width, height), type, site name, URL, locale, video, plus the full og:\* map
- **Twitter Card tags**: card type, site, creator, title, description, image
- **Core SEO meta**: title, meta description, canonical, language, theme colour, favicon
- **Rich data hints**: oEmbed endpoint and JSON-LD schema types (Article, Product, Organization…)
- **Preview score & missing tags**: what a share preview is missing
- **Image check (on by default)**: confirms og:image loads and is really an image, with type and size
- **Fast**: plain HTTP, 8 URLs in parallel, no browser

### Why choose us over cheaper scrapers?

- **Honest output**: limits are documented, missing data is labeled, never invented
- **Clean, consistent schema** ready for Excel, Sheets, BI tools or an LLM
- **No account risk**: no logins, no cookies, no API keys
- **Pay per result** with a built-in cost guard; no subscription, failed items are never charged
- **Fast and light**: no residential proxy, so runs finish in seconds and stay cheap
- **Maintained by IntelScrape** and fixed fast when the source changes

### Who is it for?

- **App developers**: unfurl links in chat apps, CMSs and feeds
- **SEO & social teams**: audit sites for missing or broken share previews
- **Publishers**: check every article has a working image before promotion
- **Marketers**: QA campaign landing pages before launch
- **Data teams**: enrich URL lists with titles, descriptions and images
- **AI agents**: fetch a quick summary card for any link

### How to use it

#### In Apify Console (no code)

1. Click **Try for free** / **Start**. The form is prefilled with a working example.
2. Change the inputs (see examples below).
3. Click **Start**, then export the results as **JSON, CSV, Excel, XML or HTML**, or open them in Google Sheets.
4. Optional: **Schedule** the actor to run hourly, daily or weekly.

#### Via API

```bash
curl -X POST "https://api.apify.com/v2/acts/intelscrape~open-graph-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://stripe.com", "https://github.com/apify/crawlee", "https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "checkImages": true}'
```

Or use the official [Apify JavaScript](https://docs.apify.com/api/client/js/) and [Python](https://docs.apify.com/api/client/python/) clients:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("intelscrape/open-graph-scraper").call(run_input={"urls": ["https://stripe.com", "https://github.com/apify/crawlee", "https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "checkImages": true})
for item in client.dataset(run["default_dataset_id"]).iterate_items():
    print(item)
```

#### With AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) or the [IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace) to Claude Desktop, Cursor, ChatGPT or any MCP client, then ask in plain language, e.g. *"Run intelscrape/open-graph-scraper with the default input and summarise the results."*

### Input examples

**Three URLs with image check (default)**

```json
{
  "urls": ["https://stripe.com", "https://github.com/apify/crawlee", "https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
  "checkImages": true
}
```

**Fast metadata only**

```json
{
  "urls": ["https://stripe.com", "https://www.shopify.com/blog"],
  "checkImages": false
}
```

### Output fields

| Field | Description |
|---|---|
| `url / finalUrl / httpStatus` | Input, URL after redirects, status |
| `title / metaDescription / canonicalUrl / language` | Core meta |
| `ogTitle / ogDescription / ogImage / ogImageAlt / ogImageWidth / ogImageHeight` | Preview fields |
| `ogType / ogSiteName / ogUrl / ogLocale / ogVideo` | More Open Graph |
| `twitterCard / twitterSite / twitterCreator / twitterTitle / twitterDescription / twitterImage` | Twitter Card |
| `faviconUrl / themeColor / oembedUrl / jsonLdTypes` | Extras |
| `allOpenGraph / allTwitter` | Every og:\* and twitter:\* tag |
| `missingTags / previewScore` | Share-readiness audit |
| `ogImageCheck` | status, ok, contentType, sizeBytes |

#### Sample output

```json
{
  "url": "https://github.com/apify/crawlee",
  "httpStatus": 200,
  "ogTitle": "GitHub - apify/crawlee: Crawlee—A web scraping and browser automation library…",
  "ogImage": "https://opengraph.githubassets.com/…/apify/crawlee",
  "ogSiteName": "GitHub",
  "twitterCard": "summary_large_image",
  "missingTags": [],
  "previewScore": 100,
  "ogImageCheck": { "status": 200, "ok": true, "contentType": "image/png" }
}
```

### Pricing (pay per event)

| Event | When it is charged | Price |
|---|---|---|
| **Actor start** | once per run | $0.005 |
| **URL** | per URL parsed | $0.001 |
| **Image check** | per URL whose og:image is checked (on by default; turn off to skip) | $0.0005 |

#### Cost examples

| Run | Cost |
|---|---|
| Default run: 3 URLs | $0.0095 |
| 1,000 URLs with image check | $1.505 |
| 10,000 URLs, metadata only | $10.005 |

Platform usage is included in these prices. Set **Max charge per run** in the run options to cap spend; the actor stops cleanly when the limit is reached and keeps everything collected so far.

### Tips for best results

- Turn off image checks for the cheapest bulk metadata pass.
- Sort by previewScore to find pages that share badly.
- Pages that build their tags with JavaScript only (rare) need a browser; use our Website to PDF actor's text output instead.
- Results reflect what social networks see: they also read raw HTML.

### FAQ

#### Does it render JavaScript?

No, and that is deliberate: Facebook, LinkedIn, Slack and X read the raw HTML too, so this shows exactly what they see.

#### What is the preview score?

100 minus points for each missing core tag (og:title, og:description, og:image, og:url, og:type, twitter:card), title and meta description.

#### Are failed URLs charged?

No. Pages that fail to load or are not HTML are listed with the error and not charged.

#### Does it follow redirects?

Yes, and finalUrl shows where the page ended up.

#### Can I use it as a link-unfurl API?

Yes. Call it through the Apify API or MCP with one or many URLs.

#### Do I need an API key?

No.

### Honest limits

- JavaScript-only tags are not seen (same as social networks).
- Some sites block cloud servers; the actor retries through a proxy automatically.
- Image size comes from headers and may be missing for some CDNs.
- Only the first 3 MB of each page is parsed.

### Related IntelScrape bots

- [Website to PDF](https://apify.com/intelscrape/website-to-pdf): any URL to a print-ready PDF
- [Tech Stack Detector](https://apify.com/intelscrape/tech-stack-detector): CMS, analytics & frameworks per domain
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper): emails, phones & socials from sites
- [Google Autocomplete Scraper](https://apify.com/intelscrape/google-autocomplete-scraper): keyword suggestions from Google, YouTube, Amazon & Bing
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace): IntelScrape tools for AI agents

### Legal

This actor collects publicly available data only. You are responsible for using the results lawfully and in line with the source's terms and applicable privacy laws (GDPR, CCPA, PIPL, PDPA). Process personal data only with a legitimate purpose. IntelScrape is not affiliated with, endorsed by or sponsored by the data source; all trademarks belong to their owners.

# Actor input Schema

## `urls` (type: `array`):

Pages to read (one per line).

## `checkImages` (type: `boolean`):

Request the preview image and report status, type and size, so you catch broken previews. Charged per URL with an image.

## `proxyConfiguration` (type: `object`):

Not needed normally. The actor switches to Apify Proxy automatically if the source starts rate-limiting.

## Actor input object example

```json
{
  "urls": [
    "https://stripe.com",
    "https://github.com/apify/crawlee",
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "checkImages": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://stripe.com",
        "https://github.com/apify/crawlee",
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ],
    "checkImages": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/open-graph-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": [
        "https://stripe.com",
        "https://github.com/apify/crawlee",
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    ],
    "checkImages": True,
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/open-graph-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://stripe.com",
    "https://github.com/apify/crawlee",
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "checkImages": true
}' |
apify call intelscrape/open-graph-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,intelscrape/open-graph-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VBNPxmQedUJ0N84si/builds/JmeAHZRi5H2dVxc5j/openapi.json
