Patreon Scraper With Launch Date & Billing Setup avatar

Patreon Scraper With Launch Date & Billing Setup

Pricing

from $5.99 / 1,000 results

Go to Apify Store
Patreon Scraper With Launch Date & Billing Setup

Patreon Scraper With Launch Date & Billing Setup

Patreon Scraper — Scrape Patreon creator profiles, launch dates, billing setup, membership tiers, prices, benefits, and audience details. Extract structured data for creator research, competitive analysis, market research, and subscription insights.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

139

Total users

1

Monthly active users

2 days ago

Last modified

Share

Patreon Scraper — Campaign Launch Dates, Billing Setup and Free Trials

Patreon Scraper With Launch Date & Billing Setup profiles public Patreon campaigns from a URL, username or search keyword and returns structured JSON: the campaign's launch date, creation date and last public post, plus exactly how it charges — monthly or per release, in which currency, upfront or not, with or without a free trial. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. No Patreon account, login or API key is required — every field comes from what Patreon already serves to a logged-out visitor. Point it at a niche and get back campaign age, activity and monetization mechanics in one pass instead of guessing them from a patron count.

What is Patreon Scraper With Launch Date & Billing Setup?

It is a query-driven Patreon campaign scraper: give it a patreon.com/ URL to profile one campaign directly, or a bare username or free-text keyword to run Patreon's own creator search and profile every campaign it returns. Results come back as one flat JSON object per campaign, pushed to an Apify dataset. No Patreon account or login is needed — every request hits Patreon's public, logged-out about.json and /api/campaigns surfaces.

What sets this apart from a plain profile scrape is the launch and billing layer: launchedDate (when the page went live) sits next to createdDate (when the campaign object was first created, which is earlier), and both sit next to the actual billing mechanics — billingModel, isChargeUpfront, isChargedImmediately, hasFreeTrial, freeTrialDays. A launchedBetween window can filter the result set to campaigns that launched inside a date range, before you spend a row on it.

  • Profile a specific campaign from its patreon.com/ URL, or search by keyword and cap the result at maxData campaigns
  • Read launch date, creation date, posting frequency and the newest public post
  • Read the full billing setup: model, currency, charge timing, free trial length and which tiers carry it
  • Read publishing format (podcast, video, shows, collections, shop, per-release) mapped from the campaign's own published flags
  • Filter or flag campaigns by a launch-date window with launchedBetween and onlyKeepMatchingCampaigns
  • Route traffic through Apify proxy groups or your own proxy URLs

What data can you get with Patreon Scraper With Launch Date & Billing Setup?

Each campaign row is a merge of five field groups: campaign identity, launch & activity, billing & free trial, publishing format, and social links.

Result TypeExtracted FieldsPrimary Use Case
Campaign identityname, creator_name, username, url, campaign_id, about, patron_count, paid_members, total_posts, is_nsfw, tiers, earnings_per_month, earnings_hidden, earnings_currencyBuild a base creator/campaign profile
Launch & activitylaunchedDate, launchedAt, createdDate, createdAt, latestPostDate, latestPostTitle, latestPostUrl, postFrequencyPerMonth, publicPostsAvailableScore campaign age and whether it's still active
Billing setup & free trialbillingModel, payPerName, billingCurrency, isChargeUpfront, isChargedImmediately, hasFreeTrial, freeTrialDays, freeTrialTierIds, showsEarnings, showsPatronCount, earningsVisibility, pledgeUrlCompare monetization mechanics across a niche
Publishing formatcontentFormats, oneLiner, mainVideoUrl, numShows, numCollections, hasVisibleShop, hasRss, hasPublicRss, hasSpotifyRssSegment campaigns by what they publish
Social linkssocials, instagram, twitter, youtube, facebook, twitch, tiktokFind a campaign's owned channels off-platform

Launch date, creation date and billing setup

This is the block a plain Patreon profile scrape does not carry. launchedDate is the day the campaign page went live (Patreon's published_at); createdDate is the earlier day the campaign object was made — the gap between the two is how long the creator built in private before launching. Alongside it, billingModel reports monthly or per_creation, isChargeUpfront and isChargedImmediately report the charge-timing switches, and hasFreeTrial / freeTrialDays report whether a trial exists and how long it runs. A field Patreon did not publish comes back None, never a guessed 0 or false:

{
"launchedDate": "2021-09-19",
"createdDate": "2021-06-02",
"billingModel": "monthly",
"payPerName": "month",
"billingCurrency": "USD",
"isChargeUpfront": true,
"isChargedImmediately": true,
"hasFreeTrial": true,
"freeTrialDays": 7,
"freeTrialTierIds": ["9911002"]
}

Publishing format and membership tiers

contentFormats is a mechanical tag list — podcast_rss, video, shows, collections, shop, per_release — each one mapped from a single published flag (has_rss, main_video_url, num_shows, and so on), so every tag traces to one payload key. tiers is the array of paid, titled membership tiers with name, price, description and discord_access, useful for benchmarking a niche's pricing ladder without opening every profile.

Why not build this yourself?

Patreon's own developer API is OAuth-scoped to campaigns the authenticated user owns or manages — it has no public endpoint for searching or listing campaigns you don't administer, so it cannot power a discovery workflow like "find every campaign matching a keyword." Building that yourself means reverse-engineering Patreon's logged-out about.json and JSON:API /api/campaigns routes, tracking Next.js buildId rotations across deploys, and handling Cloudflare, which fronts every request. This Actor already does that: it caches and refreshes the buildId per run, falls back to the campaigns API when the SSR route 404s or returns a redirect envelope, and escalates through unproxied → Apify datacenter → Apify residential proxy on a 403, 429 or 503.

How to scrape Patreon with Patreon Scraper With Launch Date & Billing Setup?

  1. Open the Actor's page on the Apify Store and click Run, or call it from the Apify API
  2. Enter one or more items in startUrls — a patreon.com/ profile URL to profile it directly, or a bare username / keyword to search
  3. Set the toggles that decide which columns you pay to fetch: includeLaunchDate, fetchLatestPostDate, includeBillingAndTrial, includeCreationType, and optionally a launchedBetween date window
  4. Start the run
  5. Download the dataset as JSON, CSV, Excel, or stream it live via the Apify API
{
"startUrls": ["python", "https://www.patreon.com/GreenRoomPythons"],
"maxData": 25,
"includeLaunchDate": true,
"fetchLatestPostDate": true,
"includeBillingAndTrial": true,
"includeCreationType": true,
"launchedBetween": "2020-01-01..2023-12-31",
"onlyKeepMatchingCampaigns": true
}

How to run multiple queries in one job

startUrls accepts an array of items, and each one is resolved independently: a patreon.com/ URL is profiled directly and always in full, while anything else is run through Patreon's own creator search up to maxData results. Mix direct profiles and keywords freely in the same run — direct profiles ignore maxData entirely, so a run with three keywords and five direct URLs charges for 3 × maxData searched rows plus exactly 5 direct rows.

⬇️ Input

startUrls is the only required field. Everything else has a default and can be left as-is for a first run.

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray (stringList)A patreon.com/ item is profiled directly; anything else — including a bare username — runs through Patreon's own creator search as a keyword.["python", "https://www.patreon.com/GreenRoomPythons"]
maxDataNointegerHow many campaigns to keep per search keyword. Default 10, minimum 1, maximum 500. Direct profile URLs always resolve in full and ignore this number.25
includeLaunchDateNobooleanReturns launchedAt, createdAt, postFrequencyPerMonth and publicPostsAvailable. Default true. Costs one extra request per campaign.true
fetchLatestPostDateNobooleanAdds latestPostDate, latestPostTitle and latestPostUrl by reading one row off the public post feed. Default true. Costs one more request per campaign.true
includeBillingAndTrialNobooleanReturns billingModel, payPerName, billingCurrency, isChargeUpfront, isChargedImmediately, hasFreeTrial, freeTrialDays plus showsEarnings / showsPatronCount / earningsVisibility. Default true.true
includeCreationTypeNobooleanReturns contentFormats plus the raw flags and oneLiner it is built from. Default true.true
launchedBetweenNostringYYYY-MM-DD..YYYY-MM-DD. Either side may be empty for an open end. Empty (default "") keeps every campaign.2020-01-01..2023-12-31
onlyKeepMatchingCampaignsNobooleanON (default true) drops campaigns outside the window and keeps paging to fill maxData. OFF returns every campaign flagged with passedLaunchDateFilter and filterReasons. Ignored when no window is set.true
proxyConfigurationNoobject (proxy)Apify proxy groups, or your own proxy URLs when the section is expanded.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

Common pitfall: launchedBetween is a single string with a literal .. separator (2020-01-01..2023-12-31), not two separate date fields — a typo that doesn't match YYYY-MM-DD..YYYY-MM-DD fails the run at start-up rather than silently filtering nothing. A campaign whose launch date Patreon never published fails the window too, and says so in filterReasons, rather than being quietly passed through.

⬆️ Output

Output is typed, normalized JSON with a stable schema across every row in a run — a switched-off toggle leaves its columns present as null (or [] for array columns) rather than removing the keys, so the dataset table keeps one shape start to finish. Download it as JSON, CSV, Excel/XLSX, or pull it live through the Apify API and Apify's dataset export formats.

The default dataset view surfaces 48 of the columns below for readability. The Actor's row-building code (data_extractor.py and launch_billing.py) writes more than that on every successful row — the full field reference is below the example.

Scraped campaign results

[
{
"url": "https://www.patreon.com/GreenRoomPythons",
"id": "campaign_7057610",
"campaign_id": 7057610,
"avatar_photo_blurred_url": "https://c10.patreonusercontent.com/avatars/blurred.jpg",
"avatar_photo_url": "https://c10.patreonusercontent.com/avatars/full.jpg",
"creation_name": "podcast episodes",
"creator_name": "Green Room Pythons",
"is_nsfw": false,
"name": "Green Room Pythons",
"patron_count": 412,
"total_posts": 318,
"primary_theme_color": 5802752,
"thumb": "https://c10.patreonusercontent.com/avatars/thumb.jpg",
"tiers": [
{"id": "9911001", "name": "Listener", "price": 3.0, "description": "Early access to every episode.", "discord_access": false},
{"id": "9911002", "name": "Superfan", "price": 10.0, "description": "Early access plus the monthly Q&A.", "discord_access": true}
],
"about": "A weekly podcast about herpetoculture and ball python genetics.",
"total_members": 412,
"paid_members": 287,
"post_count": 318,
"earnings_per_month": null,
"earnings_hidden": true,
"earnings_currency": "USD",
"socials": [
{"platform": "instagram", "url": "https://instagram.com/greenroompythons", "display_name": "greenroompythons", "is_public": true},
{"platform": "youtube", "url": "https://youtube.com/greenroompythons", "display_name": null, "is_public": true}
],
"data_source": "about_json",
"youtube": "https://youtube.com/greenroompythons",
"instagram": "https://instagram.com/greenroompythons",
"twitter": null,
"facebook": null,
"twitch": null,
"tiktok": null,
"launchedAt": "2021-09-19T20:36:54.000+00:00",
"launchedDate": "2021-09-19",
"createdAt": "2021-06-02T14:11:03.000+00:00",
"createdDate": "2021-06-02",
"latestPostDate": "2026-08-09T15:00:00.000+00:00",
"latestPostTitle": "Episode 214: Clutch season check-in",
"latestPostUrl": "https://www.patreon.com/posts/episode-214-99887766",
"postFrequencyPerMonth": 4,
"publicPostsAvailable": 96,
"billingModel": "monthly",
"payPerName": "month",
"billingCurrency": "USD",
"isChargeUpfront": true,
"isChargedImmediately": true,
"hasFreeTrial": true,
"freeTrialDays": 7,
"freeTrialTierIds": ["9911002"],
"showsEarnings": false,
"showsPatronCount": true,
"memberCountPreference": "patron_count",
"earningsVisibility": "hidden",
"pledgeUrl": "https://www.patreon.com/checkout/GreenRoomPythons",
"contentFormats": ["podcast_rss", "shows"],
"oneLiner": "A weekly deep-dive into ball python genetics and husbandry.",
"mainVideoUrl": null,
"numShows": 2,
"numCollections": 0,
"hasRss": true,
"hasPublicRss": false,
"hasSpotifyRss": true,
"hasVisibleShop": false,
"isPlural": false,
"passedLaunchDateFilter": true,
"filterReasons": [],
"query": "python",
"username": "GreenRoomPythons",
"success": true,
"error": null
},
{
"url": "https://www.patreon.com/PixelPagesComics",
"id": "campaign_5533210",
"campaign_id": 5533210,
"avatar_photo_blurred_url": null,
"avatar_photo_url": "https://c10.patreonusercontent.com/avatars/pixelpages.jpg",
"creation_name": "comic pages",
"creator_name": "Pixel Pages Comics",
"is_nsfw": false,
"name": "Pixel Pages Comics",
"patron_count": 189,
"total_posts": 640,
"primary_theme_color": null,
"thumb": "https://c10.patreonusercontent.com/avatars/pixelpages-thumb.jpg",
"tiers": [
{"id": "7701", "name": "Reader", "price": 2.0, "description": "One new page every update.", "discord_access": false}
],
"about": "Independent webcomic updated twice weekly.",
"total_members": 189,
"paid_members": 142,
"post_count": 640,
"earnings_per_month": null,
"earnings_hidden": null,
"earnings_currency": null,
"socials": [
{"platform": "twitter", "url": "https://twitter.com/pixelpagescomics", "display_name": null, "is_public": null}
],
"data_source": "campaign_api",
"youtube": null,
"instagram": null,
"twitter": "https://twitter.com/pixelpagescomics",
"facebook": null,
"twitch": null,
"tiktok": null,
"launchedAt": "2019-03-11T09:00:00.000+00:00",
"launchedDate": "2019-03-11",
"createdAt": "2019-01-22T11:45:00.000+00:00",
"createdDate": "2019-01-22",
"latestPostDate": "2026-08-12T10:00:00.000+00:00",
"latestPostTitle": "Page 640",
"latestPostUrl": "https://www.patreon.com/posts/page-640-98877665",
"postFrequencyPerMonth": 8,
"publicPostsAvailable": 210,
"billingModel": "per_creation",
"payPerName": "Each Page",
"billingCurrency": "USD",
"isChargeUpfront": null,
"isChargedImmediately": null,
"hasFreeTrial": null,
"freeTrialDays": null,
"freeTrialTierIds": [],
"showsEarnings": null,
"showsPatronCount": null,
"memberCountPreference": null,
"earningsVisibility": "hidden",
"pledgeUrl": null,
"contentFormats": ["per_release"],
"oneLiner": null,
"mainVideoUrl": null,
"numShows": null,
"numCollections": null,
"hasRss": null,
"hasPublicRss": null,
"hasSpotifyRss": null,
"hasVisibleShop": null,
"isPlural": null,
"passedLaunchDateFilter": true,
"filterReasons": [],
"query": "webcomic",
"username": "PixelPagesComics",
"success": true,
"error": null
},
{
"url": "https://www.patreon.com/InactiveVanity404",
"username": "InactiveVanity404",
"query": "python",
"success": false,
"error": "about_json_http_404 | campaign_id_unresolved",
"passedLaunchDateFilter": null,
"filterReasons": []
}
]

The second row shows a campaign recovered through the /api/campaigns/<id> fallback (data_source: "campaign_api") after its SSR route returned a redirect envelope. That surface does not carry pledge_sum, primary_theme_color, or the free-trial relationship on every reward object, so hasFreeTrial comes back null — unknown, not a guessed false — along with several format flags. The third row is an unresolved vanity: it never reached a campaign, so it carries only the failure shape (url, username, query, success, error, passedLaunchDateFilter, filterReasons) instead of the full column set.

Full output field reference

Every successful row carries all of the fields below, regardless of which toggles are on — a switched-off block just leaves its fields null or []. Fields marked "view" are in the default dataset view; the rest are pushed to every row but need a custom view or JSON/CSV export to see.

Campaign identity (from data_extractor.py)

FieldTypeViewDescription
urlstringyesCampaign's canonical Patreon URL
idstringnocampaign_<id>, Patreon's JSON:API resource id
campaign_idintegeryesNumeric campaign id
namestringyesCampaign display name
creator_namestringyesCreator's full name
creation_namestringnoWhat the creator says they make (e.g. "podcast episodes")
aboutstringyesCampaign summary, HTML stripped with paragraph breaks kept
is_nsfwbooleanyesPatreon's own NSFW flag
patron_count / total_membersintegerpatron_count onlyTotal members (both keys hold the same number; kept for compatibility)
paid_membersintegeryesPaying member count
total_posts / post_countintegertotal_posts onlyTotal posts published (both keys hold the same number)
earnings_per_monthfloatyesMonthly earnings in earnings_currency; null unless the creator publishes it
earnings_hiddenbooleanyesWhether earnings are hidden from the public page
earnings_currencystringyesCurrency code for earnings_per_month
tiersarrayyesPaid, titled membership tiers: id, name, price, description, discord_access
avatar_photo_url / avatar_photo_blurred_url / thumbstringnoAvatar image URLs
primary_theme_colorintegernoCampaign's theme color as a decimal RGB int (hex converted)
socialsarrayyesEvery connected social platform: platform, url, display_name, is_public
youtube, instagram, twitter, facebook, twitch, tiktokstringyesFlat convenience columns pulled out of socials
data_sourcestringyesabout_json or campaign_api, depending which surface resolved this row

Launch & activity (from launch_billing.py, gated by includeLaunchDate)

FieldTypeViewDescription
launchedAt / launchedDatestringlaunchedDate onlyFull timestamp / ISO date the campaign page went live
createdAt / createdDatestringcreatedDate onlyFull timestamp / ISO date the campaign object was created (earlier than launch)
postFrequencyPerMonthintegeryesPatreon's own posting-frequency estimate
publicPostsAvailableintegeryesSize of the public post feed
latestPostDatestringyesPublish timestamp of the newest public post (needs fetchLatestPostDate)
latestPostTitlestringnoTitle of the newest public post
latestPostUrlstringnoURL of the newest public post

Billing setup & free trial (gated by includeBillingAndTrial)

FieldTypeViewDescription
billingModelstringyesmonthly or per_creation
payPerNamestringyesWhat a charge is per, in the creator's own words (e.g. "month", "Each Page")
billingCurrencystringyesCurrency campaign members are billed in
isChargeUpfrontbooleanyesWhether the first charge happens immediately on pledge
isChargedImmediatelybooleanyesWhether ongoing charges are immediate rather than delayed
hasFreeTrialbooleanyesWhether any tier runs a free trial; null when this surface can't see it
freeTrialDaysintegeryesLongest active trial length across tiers, in days
freeTrialTierIdsarraynoTier ids that carry an active free trial
showsEarningsbooleanyesWhether the creator publishes monthly earnings
showsPatronCountbooleanyesWhether the creator publishes the member count
memberCountPreferencestringyesWhich member figure the creator prefers to display
earningsVisibilitystringyesRaw earnings-visibility setting from /api/campaigns
pledgeUrlstringyesDirect join / checkout URL

Publishing format (gated by includeCreationType)

FieldTypeViewDescription
contentFormatsarrayyesTags from podcast_rss, video, shows, collections, shop, per_release, one per published flag
oneLinerstringnoCampaign's one-line tagline
mainVideoUrlstringnoProfile's featured video, if any
numShowsintegeryesNumber of Patreon Shows the campaign runs
numCollectionsintegeryesNumber of content collections
hasVisibleShopbooleanyesWhether the campaign has a visible Patreon Shop
hasRss, hasPublicRss, hasSpotifyRssbooleannoPodcast RSS feed switches
isPluralbooleannoWhether the campaign is run by a group/team rather than one creator

Run metadata (always present)

FieldTypeViewDescription
passedLaunchDateFilterbooleanyesWhether the row matched launchedBetween; null on a failed row
filterReasonsarrayyesWhy a row failed the window, e.g. launch_date_not_published
querystringyesThe startUrls item this row came from ("direct" for a URL input)
usernamestringyesResolved Patreon username / vanity
successbooleanyesfalse on an unresolved vanity — see the failure shape above
errorstringyesFailure reason, null on a successful row

How can I use the data extracted with Patreon Scraper With Launch Date & Billing Setup?

  • Creator-economy analysts and researchers: pull every campaign in a niche and compare billingModel, hasFreeTrial and freeTrialDays side by side to benchmark how a category actually monetizes, instead of assuming it's all monthly billing.
  • AI engineers and LLM developers: an agent issues a keyword or URL, receives the structured campaign JSON back, and passes about, contentFormats and tiers straight into the model as grounded context for a research or recommendation task.
  • Market researchers: run the same keyword set on a schedule and track how many campaigns in a niche pass launchedBetween, giving a rolling read on category growth without re-deriving age from patron counts.
  • Creator-tooling product teams: use tiers, billingModel and freeTrialDays across a comparison set to show a prospective customer how their setup compares to campaigns like theirs.

How do you monitor Patreon billing setup and launch activity over time?

Billing setup is not fixed once a campaign launches — creators change billingModel, add or drop a free trial, or go quiet. Monitoring means running the same startUrls set on a schedule and diffing the fields that actually move: hasFreeTrial and freeTrialDays (a trial added or shortened), billingModel and payPerName (a switch from per-release to monthly or back), latestPostDate and postFrequencyPerMonth (posting has slowed or stopped), and patron_count / paid_members (growth or decline). launchedDate and createdDate are fixed once published and don't need re-checking.

A practical loop: keep a saved list of campaign URLs or a keyword set, run this Actor against it on a recurring Apify schedule, and diff each new dataset against the previous run on username. Alert when hasFreeTrial flips, when billingModel changes, or when latestPostDate hasn't advanced in longer than the campaign's own postFrequencyPerMonth would predict — that combination is a stronger "gone quiet" signal than patron count alone. Delivery is whatever the Apify schedule and dataset/webhook integrations you configure for the run support.

Integrate Patreon Scraper With Launch Date & Billing Setup and automate your workflow

Patreon Scraper With Launch Date & Billing Setup works with any language or tool that can send an HTTP request to the Apify API.

REST API with Python

import requests
TOKEN = "YOUR_APIFY_TOKEN"
ACTOR = "scrapier/patreon-scraper-with-launch-date-and-billing-setup"
run_input = {"startUrls": ["python"], "maxData": 20}
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json=run_input,
)
campaigns = resp.json()
print(campaigns[0]["name"], campaigns[0]["billingModel"])

MCP for query-grounded AI agents

Any Apify Actor, including this one, can be exposed to an MCP-compatible client through Apify's Actors MCP Server:

APIFY_TOKEN=your_token npx -y @apify/actors-mcp-server --actors scrapier/patreon-scraper-with-launch-date-and-billing-setup

An agent in Claude Desktop, Claude Code, or another MCP client then calls the Actor as a tool: it sends a keyword or URL, gets back the campaign JSON, and grounds its answer in the real launch date and billing fields instead of guessing.

Scheduled monitoring and delivery

Apify Console's built-in Schedules run this Actor on a cron interval against the same startUrls, writing each run to a fresh dataset you can diff or pull through the API. There is no actor-specific webhook feature documented here beyond Apify's platform-level dataset and run webhooks.

Yes — this Actor reads only public campaign pages that any visitor, logged out, can already see; it does not access private posts, patron-only content, or anything behind a paywall. The data here is business and product information — billing setup, launch dates, tier pricing — not personal data about private individuals, so it sits under Patreon's Terms of Service and database-rights considerations rather than GDPR/CCPA personal-data rules. Courts have distinguished scraping publicly accessible web data from unauthorized access to non-public systems (hiQ Labs, Inc. v. LinkedIn Corp., 938 F.3d 985, 9th Cir. 2019), though outcomes depend on jurisdiction and how the data is used. Scraping for a one-off research pass and scraping to train a model or build a competing product carry different risk profiles. Consult your legal team for commercial use cases involving bulk data storage.

Frequently asked questions

How many campaigns does this Actor return per keyword?

Up to maxData (default 10, maximum 500) per keyword, but Patreon's own search is usually the real ceiling — it reported between 44 and 174 hits for the keywords measured on 2026-08-10, and the run stops paging once Patreon's own meta.pages_total is exhausted rather than looping past the end of the result set. Direct patreon.com/ URLs always resolve in full and ignore maxData.

Does this Actor extract free trial data?

Yes — hasFreeTrial, freeTrialDays and freeTrialTierIds come from reward.relationships.free_trial_configuration inside the about.json payload. ⚠️ When a campaign is instead recovered through the /api/campaigns/<id> fallback (data_source: "campaign_api"), that surface's reward objects can carry an empty relationships block even on campaigns that really do run a trial — so hasFreeTrial comes back null there rather than a guessed false. Treat null as "not observable on this surface," not "no trial."

How does this Actor handle Patreon's anti-bot measures?

Every request goes out with a Chrome TLS/JA3 fingerprint (curl_cffi impersonating Chrome 131) matched to the User-Agent it sends, since Patreon fronts everything with Cloudflare. On an HTTP 403, 429 or 503 the run automatically escalates from unproxied to Apify's datacenter proxy and then to Apify's residential proxy, and retries each request up to 3 times before giving up on it.

Can I use this Actor without managing proxies or Patreon credentials?

Yes. No Patreon login, cookie or API key is ever used — every field is read from Patreon's logged-out pages. You can leave proxyConfiguration on its default (Apify RESIDENTIAL) and the Actor handles the datacenter/residential escalation itself; supplying your own proxy URLs is optional.

How do I search by keyword versus profiling one campaign directly?

Put a patreon.com/ URL in startUrls to profile that exact campaign, ignoring maxData. Put anything else — a bare username or a free-text phrase — and it runs through Patreon's own creator search as a keyword, returning up to maxData matching campaigns. Both forms can be mixed in the same startUrls array.

What does the launchedBetween date filter actually do?

Set it to YYYY-MM-DD..YYYY-MM-DD (either side can be left empty for an open end) to keep only campaigns whose launchedDate falls inside that window. With onlyKeepMatchingCampaigns on (the default), non-matching campaigns are dropped and not charged, and the search keeps paging to fill maxData with campaigns that do match. Turn it off to keep every campaign, flagged with passedLaunchDateFilter and filterReasons instead of dropped.

How do I monitor a campaign's billing setup over time?

Run the same startUrls on a recurring Apify schedule and diff each new dataset against the last one on username, watching hasFreeTrial, billingModel, freeTrialDays and latestPostDate for changes. See "How do you monitor Patreon billing setup and launch activity over time?" above for the full loop.

Does this Actor work with Claude, ChatGPT, and AI agent frameworks?

Yes on both counts. It is reachable as an HTTP endpoint through the Apify API by any agent framework that can send a request, and it can also be registered as a tool for MCP-compatible clients through Apify's Actors MCP Server (npx -y @apify/actors-mcp-server --actors scrapier/patreon-scraper-with-launch-date-and-billing-setup), letting an agent retrieve live campaign data before answering.

Does this Actor return Patreon's content category?

No, and that's deliberate rather than an oversight. Patreon does not expose its own category taxonomy to logged-out requests — it was checked against both about.json and /api/campaigns/<id> on 2026-08-10 with zero occurrences. Rather than ship a guessed category column, this Actor returns contentFormats, where every tag maps to one real published flag.

Are failed or filtered rows charged?

No. Only successfully resolved campaigns are charged, under the row_result pay-per-event. A campaign the search couldn't resolve is still pushed to the dataset with success: false and a reason in error, but not charged; a campaign dropped by an active launchedBetween window (with onlyKeepMatchingCampaigns on) is never pushed at all. To pull only the charged rows from an exported dataset, filter on success == true.

Your feedback

Found a bug, or a Patreon field this Actor should be reading but isn't? Open an issue from this Actor's page in the Apify Store, or reach out through Scrapier's Apify profile — reports like that go straight into the next update.