# Kickstarter Project Scraper (`mrdoe/kickstarter-project-scraper`) Actor

Scrape Kickstarter projects, campaigns, creators, funding, backers, categories, locations, images, and video URLs. Extract structured Kickstarter data from Discover pages for market research, competitor analysis, crowdfunding research, creator discovery, and campaign monitoring.

- **URL**: https://apify.com/mrdoe/kickstarter-project-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** Developer tools, Lead generation, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![Website Preview](./assets/website-preview.png)

### What does Kickstarter Project Scraper do?

**Kickstarter Project Scraper** extracts complete campaign data from any [Kickstarter.com](https://www.kickstarter.com/) project page - funding stats (pledged amount, goal, backers, percentage funded, days left), campaign details (title, blurb, category, location, creator, dates), the full story text, and every reward tier. It can also download the project's cover photo and pitch video for you. Give it project URLs, discover/category URLs, or both, and it returns one structured row per project. Running it on the Apify platform gets you scheduling, API access to results, proxy rotation, and monitoring out of the box.

### Why use Kickstarter Project Scraper?

- Track funding progress, backer counts, and deadlines across a shortlist of campaigns for market research or competitor analysis.
- Build a leads or outreach list of creators, complete with profile links and avatars.
- Analyze reward tier pricing and structure across successful campaigns in a category.
- Archive a campaign's story, photo, and pitch video before it disappears.
- Feed clean, structured campaign data into spreadsheets, BI tools, or downstream automation without manual copy-pasting.

### What data can you extract?

| Field                                                                                | Description                                                                               |
| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- |
| `project_id`                                                                         | Kickstarter's numeric project ID                                                          |
| `slug`, `url`                                                                        | Project slug and full page URL                                                            |
| `title`, `blurb`                                                                     | Campaign title and short tagline                                                          |
| `state`                                                                              | `live`, `successful`, `failed`, `canceled`, etc.                                          |
| `pledged`, `funding_goal`, `percentage_funded`                                       | Funding amount, goal, and percent funded, in the project's own currency                   |
| `usd_pledged`, `converted_pledged_amount`                                            | Amount pledged converted to USD / to the currency Kickstarter displayed for this run      |
| `backers`                                                                            | Number of backers                                                                         |
| `days_left`                                                                          | Days remaining, only set while the project is still `live`                                |
| `currency`, `currency_symbol`, `fx_rate`                                             | Currency details and exchange rate used for conversions                                   |
| `creator`, `creator_id`, `creator_slug`, `creator_profile_url`, `creator_avatar_url` | Creator name and profile                                                                  |
| `category`, `category_id`, `parent_category`                                         | Campaign category and its parent category                                                 |
| `location`, `location_country`, `location_state`                                     | Creator's declared location                                                               |
| `created_at`, `launched_at`, `deadline`, `state_changed_at`                          | Campaign lifecycle timestamps (ISO 8601)                                                  |
| `staff_pick`, `spotlight`, `labelledAs`                                              | Whether Kickstarter featured the project as "Project We Love" or a staff pick             |
| `image_url`, `video_high_url`, `video_hls_url`                                       | Public URLs for the cover photo and pitch video                                           |
| `photoKey`, `videoKey`                                                               | References to the downloaded copies in this run's storage (see **Media downloads** below) |
| `rewards`                                                                            | Array of reward tiers with title, description, and minimum pledge                         |
| `text`                                                                               | Full plain-text campaign story                                                            |
| `rewardsCount`, `imageCount`, `videoCount`, `gifCount`                               | Counts of reward tiers and media embedded in the story                                    |

See the **Dataset** tab after a run for the complete field list.

### How to use Kickstarter Project Scraper

1. Click **Try for free** (or **Start**) to open the Actor.
2. Paste one or more Kickstarter project URLs, and/or discover/category URLs, into **Start URLs** - e.g. `https://www.kickstarter.com/projects/<creator>/<project-slug>` or `https://www.kickstarter.com/discover/categories/games`.
3. Keep **Proxy configuration** on a residential proxy (enabled by default) for reliable results.
4. Optionally set **Max items** and **Download photos and videos**.
5. Click **Start** and wait for the run to finish, then open the **Dataset** tab to view, filter, and export the results.

### Input parameters

| Parameter            | Type    | Required | Default           | Description                                                                                                                                                                |
| -------------------- | ------- | -------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | Yes      | -                 | Kickstarter project URLs (one row each) and/or discover/category URLs (crawled for projects, with pagination).                                                             |
| `maxItems`           | integer | No       | `10`              | Target number of projects to scrape. The first 10 per run are free. For discover/category URLs, the Actor discovers extra candidate projects to make up for any that fail. |
| `downloadMedia`      | boolean | No       | `false`           | Download each project's cover photo and pitch video into this run's storage, in addition to collecting their public URLs.                                                  |
| `proxyConfiguration` | object  | Yes      | Residential proxy | Proxy settings. A residential proxy is strongly recommended - see Tips below.                                                                                              |

### Output data

A scraped project looks like this (story text truncated for readability):

```json
{
    "project_id": 1534205096,
    "slug": "the-broken-empires-rpg",
    "state": "successful",
    "title": "The Broken Empires RPG™: Sim-Lite d100 Skills-Based TTRPG",
    "blurb": "Dramatic fantasy setting and Success Level System built for speed, detail and immersion! Live (or die) with your choices.",
    "creator": "Evil Baby Entertainment",
    "creator_id": 1304340314,
    "creator_slug": "evil-baby-ent",
    "creator_profile_url": "https://www.kickstarter.com/profile/evil-baby-ent",
    "creator_avatar_url": "https://i.kickstarter.com/assets/046/539/367/....png",
    "url": "https://www.kickstarter.com/projects/evil-baby-ent/the-broken-empires-rpg",
    "rewards_url": "https://www.kickstarter.com/projects/evil-baby-ent/the-broken-empires-rpg/rewards",
    "image_url": "https://i.kickstarter.com/assets/046/834/605/....jpg",
    "pledged": 523181,
    "usd_pledged": "523181.0",
    "backers": 4346,
    "funding_goal": 10000,
    "percentage_funded": 5231.81,
    "days_left": null,
    "currency": "USD",
    "currency_symbol": "$",
    "country": "US",
    "country_displayable_name": "the United States",
    "staff_pick": true,
    "spotlight": true,
    "is_launched": true,
    "category": "Tabletop Games",
    "parent_category": "Games",
    "created_at": "2024-07-17T18:04:52.000Z",
    "launched_at": "2024-10-01T13:00:25.000Z",
    "deadline": "2024-10-31T13:00:25.000Z",
    "location": "San Antonio, TX",
    "video_high_url": "https://v2.kickstarter.com/.../video-....mp4",
    "video_hls_url": "https://v2.kickstarter.com/.../video-....m3u8",
    "rewards": [{ "id": 0, "title": "No Reward", "description": "No Reward", "minimum_pledge": 1 }],
    "photoKey": "photo-1534205096",
    "videoKey": "video-1534205096",
    "text": "Story What is The Broken Empires RPG? ...",
    "rewardsCount": 1,
    "imageCount": 50,
    "gifCount": 6,
    "hasTopVideo": true,
    "labelledAs": "Project We Love"
}
```

You can download the dataset in various formats such as JSON, CSV, Excel, or XML.

### Media downloads

When **Download photos and videos** is enabled (the default), this Actor downloads each project's cover photo and, if the video isn't too large, its pitch video, and stores them in this run's Key-Value Store. The dataset's `photoKey` and `videoKey` fields hold the storage key for each file - open the run's **Key-Value Store** tab and look up that key to retrieve it, or fetch it via the Apify API using the key. If a project has no video, or its video is too large to download, `videoKey` is `null` and `video_high_url` / `video_hls_url` still give you the public link.

### Usage examples

Scrape a single project with media downloads:

```json
{
    "startUrls": [{ "url": "https://www.kickstarter.com/projects/evil-baby-ent/the-broken-empires-rpg" }],
    "maxItems": 1,
    "downloadMedia": true
}
```

Scrape a shortlist of projects, stats only (faster, no media download):

```json
{
    "startUrls": [
        { "url": "https://www.kickstarter.com/projects/creator-one/project-one" },
        { "url": "https://www.kickstarter.com/projects/creator-two/project-two" }
    ],
    "maxItems": 10,
    "downloadMedia": false
}
```

### How much will it cost to scrape Kickstarter?

This Actor uses pay-per-result pricing: the first 10 projects per run are free, and usage beyond that is billed per project scraped. See the **Pricing** tab for current rates. Use **Max items** to scope smaller, cheaper runs.

### Tips for best results

- **Use a residential proxy.** Kickstarter has strong bot protection, and a residential proxy clears it far more reliably than a datacenter IP.
- **Occasional retries are normal, not a bug.** Some page loads get challenged even with a good proxy; this Actor automatically retries with a fresh session until it gets through (or retries run out). On a heavily-protected night, a discover/category run may land a little under **Max items** if enough individual pages get blocked even after retries - it discovers extra candidates to minimize this, but can't fully guarantee an exact count.
- **Currency conversion fields can vary between runs.** `current_currency`, `usd_exchange_rate`, and `converted_pledged_amount` reflect Kickstarter's own currency guess for the session and can differ slightly run to run; `pledged` and `funding_goal` (in the project's native `currency`) are the stable source numbers.
- **Turn on media downloads only when you need the files** - it's off by default to keep runs fast and light; enable it if you want copies of the cover photo/video, not just their URLs.

### Integrations

Connect this Actor's dataset to Google Sheets, Make, Zapier, or your own systems via the Apify API or webhooks, or schedule it to run on a recurring interval from the **Schedules** tab.

### Export formats

Results can be downloaded from the **Dataset** tab as JSON, CSV, Excel, XML, RSS, or HTML.

### Frequently asked questions

**How many projects can I scrape per run?** Up to your **Max items** setting. There's no hard cap - it's billed per project beyond the first 10 free ones.

**Can I use a search or category URL?** Yes - a discover/category URL is crawled (with pagination) to collect projects up to **Max items**. You can also mix in direct project URLs, which each always produce a row.

**Are duplicates removed?** Yes, discovered project URLs are deduplicated automatically. Direct project URLs produce at most one row each too.

**Why can some fields be empty?** Kickstarter doesn't expose every field for every project (e.g. `days_left` is only set for live campaigns, and not every project has a pitch video).

**Can I schedule this Actor?** Yes, use the Apify **Schedules** feature to run it automatically on a recurring basis.

**Does it support downloading media?** Yes - see **Media downloads** above. It's off by default and can be turned on in the input.

**Is the data current?** Yes, each run fetches the live page at request time. Funding numbers reflect the moment the run executed.

### Is it legal to scrape Kickstarter?

This Actor only collects publicly available Kickstarter campaign data. It is not affiliated with or endorsed by Kickstarter, PBC. You are responsible for using scraped data in compliance with Kickstarter's Terms of Service and applicable law.

### FAQ, disclaimers, and support

Found a bug or have a feature request? Use the Issues tab on this Actor's page. Need a custom scraping solution tailored to your workflow? Reach out through the Actor's page - custom builds are available.

# Actor input Schema

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

Kickstarter project URLs (https://www.kickstarter.com/projects/<creator>/<project-slug>) and/or discover/category URLs (https://www.kickstarter.com/discover/categories/...). Project URLs each produce one dataset row; discover/category URLs are crawled (with pagination) to collect projects up to Max items.

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

Stop the run once this many projects have been scraped. The first 10 projects per run are free; scraping more is billed per project - see the Pricing tab.

## `downloadMedia` (type: `boolean`):

Download each project's cover photo and pitch video and store them in this run's Key-Value Store, in addition to collecting their public URLs. Off by default to keep runs fast - turn on if you need copies of the files themselves.

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

Kickstarter.com has strong bot protection. A residential Apify Proxy is strongly recommended for reliable runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.kickstarter.com/projects/heygears/heygears-g1-series-first-desktop-full-color-3d-and-uv-printer"
    }
  ],
  "maxItems": 10,
  "downloadMedia": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.kickstarter.com/projects/heygears/heygears-g1-series-first-desktop-full-color-3d-and-uv-printer"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/kickstarter-project-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 = {
    "startUrls": [{ "url": "https://www.kickstarter.com/projects/heygears/heygears-g1-series-first-desktop-full-color-3d-and-uv-printer" }],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/kickstarter-project-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 '{
  "startUrls": [
    {
      "url": "https://www.kickstarter.com/projects/heygears/heygears-g1-series-first-desktop-full-color-3d-and-uv-printer"
    }
  ],
  "maxItems": 10
}' |
apify call mrdoe/kickstarter-project-scraper --silent --output-dataset

```

## MCP server setup

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