# Kickstarter Scraper — Projects, Funding, Backers & Rewards (`tortuga/kickstarter-scraper`) Actor

Scrape Kickstarter projects by keyword, category, state, location or discover URL: pledged, goal, backers, % funded, dates, creator, rewards, story. Track live campaigns on a schedule.

- **URL**: https://apify.com/tortuga/kickstarter-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (community)
- **Categories:** Other, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 project scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Kickstarter Scraper — Projects, Funding, Backers & Rewards

Scrape Kickstarter projects by keyword, category, state, location, goal or funding range, or from any Kickstarter discover URL or project page. Get the pledged amount, goal, currency and USD values, percent funded, backers, launch and deadline dates, creator, location, "Project We Love" flag, image and video for every project, and optionally the reward tiers, FAQ/update/comment counts, risks and the full campaign story.

Export to JSON, CSV or Excel, call it through the API, or schedule it to track live campaigns every day. No login and no Kickstarter account needed. You pay only for the projects you get.

### What data does Kickstarter Scraper extract?

| Field | Description |
|---|---|
| `id` | Kickstarter project id |
| `name`, `blurb` | Project title and short description |
| `url`, `projectPath`, `rewardsUrl` | Project page, `creator/slug` path, rewards page |
| `state` | `live`, `successful`, `failed`, `canceled`, `suspended`, or `submitted` / `started` for upcoming (pre-launch) pages |
| `isLaunched`, `prelaunchActivated`, `inLatePledgePhase` | Launched yet, has a pre-launch page, still taking late pledges after the campaign |
| `category`, `categoryId`, `parentCategory` | Subcategory (e.g. Tabletop Games) and its parent (Games) |
| `creatorName`, `creatorId`, `creatorUrl` | Creator name and profile URL as shown on the project |
| `location`, `locationId`, `country`, `countryName` | Project location (Kickstarter WOE id) and country |
| `currency`, `goal`, `pledged` | Goal and pledged amount in the project currency |
| `goalUsd`, `pledgedUsd`, `usdExchangeRate` | The same in US dollars (Kickstarter's own conversion rate) |
| `percentFunded`, `backersCount` | Funding progress and number of backers |
| `launchedAt`, `deadline`, `durationDays`, `createdAt`, `stateChangedAt` | Campaign dates (ISO 8601, UTC) |
| `staffPick`, `spotlight` | "Project We Love" badge, project spotlight page |
| `imageUrl`, `videoUrl`, `videoThumbnailUrl` | Main image (1024x576) and campaign video (MP4) |
| `source`, `scrapedAt` | The search or URL the project came from, and when |

With **Include project details** (and always for project URLs):

| Field | Description |
|---|---|
| `rewards` | Reward tiers: `title`, `description`, `price`, `currency`, `backersCount`, `limit`, `remaining`, `estimatedDelivery`, `shipping`, `available`, `endsAt`, `items` |
| `rewardsCount`, `addOnsCount` | Number of reward tiers and add-ons |
| `faqCount`, `updatesCount`, `commentsCount` | FAQ entries, project updates, comments |
| `risks` | The "Risks and challenges" text |
| `storyText` | The campaign story as plain text (paragraphs kept, images and videos left out) |

### How to scrape Kickstarter projects by keyword or category

1. Type one or more **Search terms** (e.g. `board game`, `3d printer`), or leave them empty to browse.
2. Optionally pick a **Category** or type a **Subcategory** (`Tabletop Games`, `Product Design`, `Gadgets`...), a **Project state** (live, upcoming, ending soon, successful, failed, canceled, late pledges), a **Sort**, a **Location** (`London`, `Berlin, Germany`, `Japan`), goal / pledged ranges in USD, a minimum or maximum percent funded, or **Only Projects We Love**.
3. Set **Max items** and click **Start**.

You can also paste any Kickstarter discover URL with the filters you set in the browser (`/discover/advanced?...`, `/discover/categories/...`, `/discover/places/...`, `/discover/tags/...`) into **Start URLs**.

### How to scrape a list of Kickstarter campaigns (project URLs)

Paste project pages such as `https://www.kickstarter.com/projects/elanlee/exploding-kittens` into **Start URLs**. Each one comes back with all the fields above plus the details (rewards, counts, risks, story). Mix them freely with searches in one run.

### Input example

```json
{
  "searchTerms": ["board game"],
  "subcategory": "Tabletop Games",
  "state": "live",
  "sort": "end_date",
  "percentFundedMin": 100,
  "maxItems": 200,
  "includeDetails": true
}
```

### Output example

```json
{
  "id": 848455089,
  "name": "Sous Coffee: Hot Coffee in Every Sip",
  "blurb": "Sous Coffee fits on your favorite coffee mug and keeps your coffee hot, no matter how slow you sip",
  "url": "https://www.kickstarter.com/projects/souscoffee/sous-coffee-hot-coffee-in-every-sip",
  "projectPath": "souscoffee/sous-coffee-hot-coffee-in-every-sip",
  "state": "live",
  "isLaunched": true,
  "prelaunchActivated": true,
  "inLatePledgePhase": false,
  "category": "Product Design",
  "categoryId": 28,
  "parentCategory": "Design",
  "creatorName": "Sean Grandfield",
  "creatorId": 44671201,
  "creatorUrl": "https://www.kickstarter.com/profile/souscoffee",
  "location": "Minneapolis, MN",
  "locationId": 2452078,
  "country": "US",
  "countryName": "United States",
  "currency": "USD",
  "goal": 5000,
  "pledged": 14212,
  "percentFunded": 284.24,
  "backersCount": 221,
  "goalUsd": 5000,
  "pledgedUsd": 14212,
  "usdExchangeRate": 1,
  "launchedAt": "2026-09-15T16:00:13Z",
  "deadline": "2026-10-30T16:00:13Z",
  "durationDays": 45,
  "createdAt": "2025-08-28T17:03:59Z",
  "stateChangedAt": "2026-09-15T16:00:17Z",
  "staffPick": false,
  "spotlight": false,
  "imageUrl": "https://i.kickstarter.com/assets/052/051/296/b5d4f23588c262ab09443b829dfae57a_original.jpg?...",
  "videoUrl": "https://v2.kickstarter.com/.../projects/5206485/video-1459836-h264_high.mp4",
  "videoThumbnailUrl": "https://d15chbti7ht62o.cloudfront.net/projects/5206485/video-1459836-h264_720.jpg?2026",
  "rewardsUrl": "https://www.kickstarter.com/projects/souscoffee/sous-coffee-hot-coffee-in-every-sip/rewards",
  "source": "search:coffee",
  "scrapedAt": "2026-10-10T06:46:25Z",
  "rewards": [
    {
      "title": "VIP",
      "description": "Secure Sous Coffee at our lowest VIP price and save 49% off the expected $99 retail price. Limited to the first 100 backers. ...",
      "price": 49,
      "currency": "USD",
      "backersCount": 100,
      "limit": 100,
      "remaining": 0,
      "estimatedDelivery": "2027-03-01",
      "shipping": "unrestricted",
      "available": false,
      "endsAt": null,
      "items": ["Sous Coffee"]
    }
  ],
  "rewardsCount": 7,
  "addOnsCount": 0,
  "faqCount": 10,
  "updatesCount": 1,
  "commentsCount": 4,
  "risks": "Bringing a new hardware product into production involves several moving parts. ...",
  "storyText": "Meet Sous Coffee\n\nWe've all been there. You pour a fresh cup of coffee, get caught up in work or life, and when you finally reach for your mug again, it's gone cold. ..."
}
```

### Monitor changes on a schedule

Turn on **Only new or changed items** and save the input as a task with a Schedule (for example daily). The Actor remembers what earlier runs of the same search or project list returned and outputs only new projects and projects whose pledged amount, backer count or state changed (a campaign that ends shows up as `live` -> `successful` or `failed`). Unchanged projects are not output and not charged; for project URLs the Actor first checks a tiny stats file, so an unchanged campaign costs almost nothing. Each output item has `changeType` (`new` or `changed`) and, for changes, `previousValues` with the old `pledged`, `backersCount` or `state`. **Max items** is the number of projects checked per run (e.g. the 100 newest live Tabletop Games campaigns), and **Monitoring key** keeps several watches on the same search apart.

### How many results can I get per search?

Kickstarter shows at most 200 pages of 48 projects (9,600) per search. When you ask for more, the Actor splits the search automatically into narrower searches (by category, then goal range, then percent funded) and removes duplicates, so you can collect far beyond that window (for example tens of thousands of successful projects in one run). The combined output is then grouped by those slices rather than in one global sort order.

### Does it work without login or cookies?

Yes. Everything comes from pages and data Kickstarter shows to any visitor. No account, cookie or API key is needed.

### Pricing

- **$0.0007 per project** (the `result` event): $0.70 per 1,000 projects from searches and discover URLs.
- **$0.003 per project with details** (the `detail` event, on top of the project): rewards, counts, risks and story when **Include project details** is on, and for every project URL.
- Apify platform usage (residential proxy traffic, storage and compute) is billed by Apify on top. Measured: about $0.02 per 1,000 projects from searches and about $0.12 per 1,000 projects with details (see the proxy note). Unchanged projects in monitoring mode are free.

### Proxy note

Kickstarter is protected by Cloudflare, which blocks datacenter IPs. The default proxy is Apify **RESIDENTIAL**, which Apify bills per GB: searches load 48 projects per request (about 60-80 KB, roughly $0.015 per 1,000 projects); details add about 10 KB per project (8 projects per request) plus one project page per run; a project URL loads the full project page (about 150 KB). The Actor rotates IPs and browser fingerprints and retries Cloudflare challenges automatically; the run's `SUMMARY` record lists requests, retries and challenges.

### Integrations and API

Use the results in Zapier, Make, n8n or Google Sheets, or call the Actor from Python or Node.js with the Apify client. The **API** tab has ready-made snippets.

### Is it legal to scrape Kickstarter?

The Actor collects only data that Kickstarter shows publicly to any visitor without logging in: project pages, funding numbers, reward tiers and the creator name and profile link shown on each project. It never logs in and does not collect backer identities, messages or contact data. You are responsible for how you use the data and for complying with Kickstarter's terms and the law that applies to you (for example GDPR when you store creator names).

### Support

Found a bug or need a field or filter added? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords as you would type them into Kickstarter's search, one search per line, e.g. "board game", "3d printer", "coffee". The filters below (category, state, sort, location, goal, funding) apply to every search term. Leave empty and set only filters to browse a whole category or state.

## `startUrls` (type: `array`):

Alternative to search terms: any Kickstarter discover page with filters set in the browser (https://www.kickstarter.com/discover/advanced?category_id=34\&state=live\&sort=end_date, /discover/categories/games/tabletop%20games, /discover/places/london-gb, /discover/tags/...), or single project pages (https://www.kickstarter.com/projects/elanlee/exploding-kittens), which always come with full details. The filter fields do not change start URLs.

## `category` (type: `string`):

Used with the search terms: only projects in this Kickstarter category (all its subcategories included).

## `subcategory` (type: `string`):

Used with the search terms: a subcategory name as Kickstarter shows it, e.g. "Tabletop Games", "Video Games", "Product Design", "Gadgets", "Comic Books", "Fiction". Overrides Category. A category id from a Kickstarter URL (category_id=34) works too.

## `state` (type: `string`):

Used with the search terms: live campaigns, upcoming (pre-launch pages), live campaigns ending soonest first, successfully funded, failed, canceled, or funded projects still taking late pledges. Empty = all states.

## `sort` (type: `string`):

Used with the search terms. Magic is Kickstarter's default mix; Newest is best for watching new launches; End date lists live campaigns ending soonest first. Default: Magic (or End date with state 'Ending soon').

## `location` (type: `string`):

Used with the search terms: only projects from this place, e.g. "London", "Berlin, Germany", "California", "Japan". Looked up with Kickstarter's own location search (the first match is used and shown in the run log). A WOE id from a Kickstarter URL (woe_id=44418) also works.

## `goalMin` (type: `integer`):

Used with the search terms: only projects whose funding goal is at least this much, in US dollars (Kickstarter converts other currencies).

## `goalMax` (type: `integer`):

Used with the search terms: only projects whose funding goal is at most this much, in US dollars.

## `pledgedMin` (type: `integer`):

Used with the search terms: only projects that have raised at least this much, in US dollars.

## `pledgedMax` (type: `integer`):

Used with the search terms: only projects that have raised at most this much, in US dollars.

## `percentFundedMin` (type: `integer`):

Used with the search terms: only projects funded at least this percentage of their goal, e.g. 100 for funded projects, 500 for 5x overfunded.

## `percentFundedMax` (type: `integer`):

Used with the search terms: only projects funded at most this percentage of their goal, e.g. 99 for campaigns that have not reached their goal yet.

## `projectsWeLove` (type: `boolean`):

Used with the search terms: only projects Kickstarter's staff picked as "Projects We Love".

## `maxItems` (type: `integer`):

Stop after this many projects in total (across all searches and URLs). Keeps cost predictable. Kickstarter shows at most 200 pages (9,600 projects) per search; when you ask for more, the actor splits the search by category, goal and funding range automatically.

## `maxItemsPerSearch` (type: `integer`):

Optional cap for each search term or discover URL, so one busy search does not use up Max items for the others (e.g. 50 projects for each of 10 keywords). Empty = no per-search cap.

## `includeDetails` (type: `boolean`):

Also get each project's reward tiers (title, price, backers, limit, remaining, estimated delivery, shipping, included items), FAQ, update and comment counts, risks and challenges text, and the campaign story as plain text. Fetched in batches of 8 projects; charged as an extra 'detail' event per project (see pricing). Project URLs always include details.

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new items or items whose price/status changed (new projects; for campaigns: a new pledged amount, backer count or state such as live -> successful). Use with a Schedule; unchanged items are not charged. With this on, Max items is the number of projects checked per run.

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input

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

Kickstarter sits behind Cloudflare, which blocks datacenter IPs, so Apify RESIDENTIAL proxy is the default and recommended. Residential traffic is billed by Apify per GB: about $0.015 per 1,000 projects from searches (48 per request), about 10 KB more per project with details, and about 150 KB per project URL (the full project page).

## Actor input object example

```json
{
  "searchTerms": [
    "board game"
  ],
  "startUrls": [],
  "maxItems": 100,
  "includeDetails": false,
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchTerms": [
        "board game"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/kickstarter-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 = {
    "searchTerms": ["board game"],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/kickstarter-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 '{
  "searchTerms": [
    "board game"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call tortuga/kickstarter-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tortuga/kickstarter-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/j0f6uiJuanPWT8Kp4/builds/Eo1vH70mbqPSZVMdO/openapi.json
