Ghost Blog Scraper
Pricing
from $3.00 / 1,000 results
Ghost Blog Scraper
Scrape posts, pages, tags, authors, and site info from any Ghost CMS-powered blog via Ghost's public Content API - including ghost.org's own /resources, /changelog, and /help sections. Works globally against any Ghost publication by auto-discovering its public Content API key.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Scrape posts, pages, tags, authors, and site info from any Ghost CMS-powered blog — including ghost.org's own /resources, /changelog, and /help publications, or any independent Ghost blog (Platformer, Lenny's Newsletter-style publications, and thousands more). Works via Ghost's official public Content API, with the read-only API key auto-discovered from the target site's homepage — no login, no admin credentials, no proxy required.
What this actor does
- Global by design: point it at any Ghost-powered site's URL and it works — the public Content API key every Ghost theme embeds for its member-signup widget is auto-discovered automatically
- Ten modes:
posts,pages,tags,authors,byPostSlugs,byPageSlugs,byTagSlugs,byAuthorSlugs,siteInfo,tiers - Post filters: tag, author, publish-date range, keyword, featured-only, minimum reading time
- Full metadata: tags, authors, feature images, SEO/OG/Twitter card fields, reading time, comment/member-access flags
- Empty fields are omitted — every record only contains fields that actually have data
Output fields
Posts / Pages (recordType: "post" / "page")
| Field | Description |
|---|---|
postId, uuid, slug | Post identity |
title, excerpt, html, plaintext | Content (plaintext only if includePlaintext is set) |
featureImage, featureImageAlt, featureImageCaption | Cover image |
featured | Whether flagged as featured |
visibility | public / members / paid |
publishedAt, updatedAt, createdAt | Timestamps |
readingTimeMinutes | Estimated reading time |
commentsEnabled, access, commentId | Comment/member-access flags, native Ghost comment-thread ID |
tags[], tagSlugs[], primaryTag | Tags (posts only) |
authors[], authorSlugs[], primaryAuthor | Authors (posts only) |
emailSubject | Newsletter email subject line, if sent as a newsletter (posts only) |
metaTitle, metaDescription, canonicalUrl | SEO fields |
ogImage, ogTitle, ogDescription, twitterImage, twitterTitle, twitterDescription | Social card fields |
postUrl | Canonical URL |
Tags (recordType: "tag")
tagId, name, slug, description, featureImage, visibility, accentColor, metaTitle, metaDescription, ogImage, ogTitle, ogDescription, twitterImage, twitterTitle, twitterDescription, canonicalUrl, tagUrl
Authors (recordType: "author")
authorId, name, slug, profileImage, coverImage, bio, website, location, social links (facebook, twitter, threads, bluesky, mastodon, tiktok, youtube, instagram, linkedin), metaTitle, metaDescription, authorUrl
Membership tiers (recordType: "tier")
tierId, name, slug, description, type (free / paid), visibility, active, welcomePageUrl, currency, monthlyPrice, yearlyPrice, trialDays, benefits[], createdAt, updatedAt
Prices are in the smallest currency unit (e.g. cents for USD) as returned by the Content API.
Site info (recordType: "site")
siteTitle, siteDescription, logo, icon, accentColor, coverImage, social links, locale, timezone, navigation[], secondaryNavigation[], metaTitle, metaDescription, ogImage, ogTitle, ogDescription, twitterImage, twitterTitle, twitterDescription, codeinjectionHead, codeinjectionFoot, membersEnabled, paidMembersEnabled, donationsEnabled, recommendationsEnabled, commentsEnabled, version, siteUuid, siteUrl
Every record also includes recordType and scrapedAt (UTC ISO timestamp).
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | posts | posts / pages / tags / authors / byPostSlugs / byPageSlugs / byTagSlugs / byAuthorSlugs / siteInfo / tiers |
siteUrl | string | https://ghost.org/resources | Base URL of any Ghost-powered site |
contentApiKey | string | – | Override, only if auto-discovery fails |
apiBaseUrl | string | – | Override, only if auto-discovery fails |
tagSlug | string | – | mode=posts: filter to a tag slug |
authorSlug | string | – | mode=posts: filter to an author slug |
visibility | select | – | mode=posts: public / members / paid |
sortOrder | string | newest | mode=posts/pages: newest / oldest |
dateFrom | string | – | mode=posts: ISO date, published on/after |
dateTo | string | – | mode=posts: ISO date, published on/before |
keyword | string | – | Case-insensitive substring match on title/excerpt |
featuredOnly | boolean | false | Only featured posts |
minReadingTime | integer | – | Drop posts/pages shorter than this many minutes |
includePlaintext | boolean | false | Also fetch a plaintext body |
postSlugs | array | – | mode=byPostSlugs: exact slugs to look up |
pageSlugs | array | – | mode=byPageSlugs: exact page slugs to look up |
tagSlugs | array | – | mode=byTagSlugs: exact tag slugs to look up |
authorSlugs | array | – | mode=byAuthorSlugs: exact author slugs to look up |
maxItems | integer | 50 | Hard cap (1–1000) |
Example: latest posts from ghost.org's resources hub
{"mode": "posts","siteUrl": "https://ghost.org/resources","sortOrder": "newest","maxItems": 25}
Example: posts filtered by tag and date range
{"mode": "posts","siteUrl": "https://ghost.org/resources","tagSlug": "newsletter","dateFrom": "2025-01-01","maxItems": 20}
Example: any independent Ghost blog
{"mode": "posts","siteUrl": "https://www.platformer.news","maxItems": 20}
Example: single post lookup
{"mode": "byPostSlugs","siteUrl": "https://ghost.org/resources","postSlugs": ["grasping-your-growth"]}
Example: exact page / tag / author lookups
{ "mode": "byPageSlugs", "siteUrl": "https://ghost.org/resources", "pageSlugs": ["referrals"] }{ "mode": "byTagSlugs", "siteUrl": "https://ghost.org/resources", "tagSlugs": ["newsletter"] }{ "mode": "byAuthorSlugs", "siteUrl": "https://ghost.org/resources", "authorSlugs": ["armando"] }
Use cases
- Content research — pull a Ghost publication's full archive with metadata
- Newsletter tracking — monitor a Ghost-powered newsletter's post cadence and topics
- Migration / backup — export posts, tags, and authors from a Ghost site
- SEO analysis — audit meta titles, descriptions, and social card fields across posts
- Competitive monitoring — track any independent Ghost publication's publishing activity
FAQs
Does this require a Ghost admin account or API key? No. Ghost's Content API key is a public, read-only key that every Ghost theme embeds directly in its homepage HTML (for the built-in member-signup widget). This actor discovers that key automatically — the same way your browser's page already has access to it.
Will this work on my own Ghost blog?
Yes — set siteUrl to your blog's URL. If your theme doesn't expose the standard member-signup widget (rare), supply contentApiKey and apiBaseUrl manually; you can find these in your Ghost Admin under Settings → Integrations.
Why does ghost.org/resources return different data than ghost.org?
ghost.org itself is a static marketing site, not Ghost CMS. Ghost's own product blog, changelog, and help center live at ghost.org/resources, ghost.org/changelog, and ghost.org/help — each is a genuine Ghost-powered publication reverse-proxied onto the main domain. All three work as siteUrl values.
Can I scrape members-only or paid content?
No — the Content API only returns what's publicly visible without a member login. Posts with visibility: members or visibility: paid will show their metadata but the html/plaintext body will be excerpt-only, matching what a logged-out visitor sees.
Is this actor global? Yes — Ghost is used by thousands of independent publications worldwide with no regional restrictions. Any Ghost site's URL works as input.