# Kickstarter Scraper (`qbie/kickstarter-scraper`) Actor

Search Kickstarter projects based on your selected criteria and get structured data on matching projects. Download your data as HTML table, JSON, CSV, Excel, XML, and RSS feed. Forked from misceres/kickstarter-search.

- **URL**: https://apify.com/qbie/kickstarter-scraper.md
- **Developed by:** [Matt Warwick](https://apify.com/qbie) (community)
- **Categories:** Other, Open source
- **Features:** Full permissions
- **Stats:** 449 total users, 12 monthly users, 99.8% runs succeeded, 11 bookmarks
- **User rating**: 2.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

Since the official Kickstarter API does not provide structured output of search results, you can get list of Kickstarter news and projects with this Kickstarter Scraper.

### This Fork

This fork has the following fixes/changes:

- Fixes an issue where the image/photo of a project is not included correctly. See https://console.apify.com/actors/h9kEJvo62ufE8PkSC#/issues/qNFoNx3PwZLS7bBGo/comments
- Changed 'photo' to 'image'
- Adds the image to the 'description' so that it can be parsed by RSS feed readers. I have only tested this with feedly but hopefully others should work too.

### Features

- scrape Kickstarter data up to **2400 items/per run**
- get data from the most recent projects of **any category** and from **any city**
- search and scrape based on the amount of money **aimed for, pledged and collected**
- **sort by** status, recency or popularity
- name your Kickstarter **datasets** to keep track of all the various runs

### Why scrape Kickstarter?

[Kickstarter](https://www.kickstarter.com/) website is full of crowdfunding projects that are changing the world in many little ways. Here's what you can do with the data about them:

- Monitor both existing and upcoming  [Kickstarter](https://www.kickstarter.com/) projects in your country or city
- Analyze which projects are the most likely to get supported and estimate the potential for success
- Strengthen your own crowdfunding campaign with real-time data
- Follow the projects competing in the same category all over the country
- Oversee your own project and [get notifications](https://apify.com/jakubbalada/content-checker) every time it gets funding
- Back up your Kickstarter investment analysis with the most recent data
- Keep track and archive the past successful projects in your city

### Tutorial

For a more detailed explanation of  [how to scrape Kickstarter](https://blog.apify.com/kickstarter-search-actor-create-your-own-kickstarter-api/)  read a step-by-step tutorial on our  [blog](https://blog.apify.com/).

And for more ideas on how to use the extracted data, check out our  [industries pages](https://apify.com/industries)  for concrete ways web scraping results are already being used across businesses of various scale and direction - in  [NGO and Government work](https://apify.com/industries/ngo-and-government) or [Journalism](https://apify.com/industries/marketing-and-media), for instance.

### Cost of usage

On average, scraping  **1000 items**  from Kickstarter via Apify platform will cost you as little as  **0.03 USD credits**  off your subscription plan. For more details about the plans we offer, platform credits and usage, see the  [platform pricing page](https://apify.com/pricing/actors).

If you're not sure how much credits you've got left on your plan and whether you might need to upgrade, you can always check your limits in the  *Settings*  ->  *Usage and Billing*  tab in  [your Console](https://console.apify.com/). The easiest way to know how many credits your actor will need is to perform a test run.

### Input

Input of this actor should be JSON containing filter specification. Allowed filters are:

| **Field** | **Description** | **Allowed values** |
|--|--|--|
|  **query**| Search term | Any string value, e.g. *Nimbus 2000 project*  |
| **category** | Category to search in | Category slug from  [this list](https://github.com/gippy/kickstarter-search/blob/master/categories.json) - anything from *books* to *community gardens* |
| **excludeTerms** | Terms to exclude from project titles and descriptions | An array of whole words or phrases, e.g. `["STL", "3D printable"]` |
|  **location**| Location to search around | Name of the location, e.g. *Prague* |
|  **status**| Status of the project | *All, Live, Successful or Upcoming*|
|  **pledged**| Amount pledged |One of: *All, <$1,000 pledged, $1,000 to $10,000 pledged, $10,000 to $100,000 pledged, $100,000 to $1,000,000 pledged and >$1,000,000 pledged*|
|  **goal**| Goal amount | One of: *All, <$1,000 goal, $1,000 to $10,000 goal, $10,000 to $100,000 goal, $100,000 to $1,000,000 goal and >$1,000,000 goal*|
|  **raised**| Amount % raised | One of: *All, <75% raised, 75% to 100% raised or >100% raised*|
|  **sort**| Sort by| popularity, newest, end_date, most_funded, most_backed or magic|
|  **maxResults**| Maximum number of projects in output | Has to be a positive number, from 0 to 2400 results|
|  **datasetName**| Name of dataset that will be overwritten with data on each run| Alphabet characters, numbers and dash (e.q. my-dataset)|

#### Input example:

```json
{
    "query": "Board games",
    "maxResults": 100,
    "excludeTerms": ["STL", "3D printable"],
    "category": "games",
    "location": "United States",
    "sort": "newest",
    "proxyConfig": { "useApifyProxy": true },
    "status": "Successful",
    "pledged": "$1,000 to $10,000 pledged",
    "goal": "$1,000 to $10,000 goal",
    "raised": "All",
    "datasetName": ""
}
```

#### Important considerations

- **maxResults**  - Kickstarter website can return a maximum of 200 pages, so at most, you will get 2400 results for any query. To get over 2400 results, run multiple instances of this actor with more specific search terms.

- **excludeTerms** - Matching is case-insensitive and requires whole word or phrase boundaries. For example, `STL` excludes "STL miniatures" but does not exclude "Castle". Excluded projects do not count toward `maxResults`, so the actor continues pagination until it collects the requested number of matching projects or Kickstarter has no more pages.

- **datasetName** - If you provide name to a named dataset, every time you run this Kickstarter search actor, it will clear the existing dataset and rewrite it with new data. You can use this option if you want to use named dataset as RSS feed or if you are creating an API.

- **Location**  - You can also run another actor [Kickstarter Location To Ids](https://www.apify.com/jaroslavhejlek/kickstarter-location-to-ids)  to find the specific ID associated with the location.

### During the run

During the run, the actor will output messages letting the you know what is going on. If you provide incorrect input the Kickstarter search actor, it will immediately stop with *Failure* state and output an explanation of what is wrong.

### Output

Once input is properly parsed the actor will load first page of results and output information about the number of found results and how many results are remaining. Every 10th page load will output prediction of how long it will take for the run to finish.

The actor reads Kickstarter's `discover/advanced.json` endpoint. Its expected top-level response contains:

- `projects`: projects on the current page
- `total_hits`: total projects matching the filters
- `has_more`: whether another page is available
- `aggregations`: aggregate filter data supplied by Kickstarter
- `seed`: Kickstarter's response seed; the actor does not need it for pagination

Each dataset item retains the project's raw scalar fields and adds flattened creator, location, category, URL, image, and formatted-date fields. Nested source objects removed from the output are `creator`, `location`, `category`, `urls`, and `profile`. Optional nested fields are represented by `null` when unavailable.

#### Output example

```json
{  
"id":  1662550845,  
"photo":  null,  
"name":  "Escape from HelL",  
"blurb":  "A board game about getting to Manhattan from Williamsburg once the L train shuts down.",  
"goal":  2500,  
"pledged":  7580,  
"state":  "successful",  
"slug":  "escape-from-hell",  
"disable_communication":  false,  
"country":  "US",  
"country_displayable_name":  "the United States",  
"currency":  "USD",  
"currency_symbol":  "$",  
"currency_trailing_code":  true,  
"deadline":  1547854200,  
"state_changed_at":  1547854200,  
"created_at":  1543533003,  
"launched_at":  1545138257,  
"staff_pick":  false,  
"is_starrable":  false,  
"backers_count":  195,  
"static_usd_rate":  1,  
"usd_pledged":  "7580.0",  
"converted_pledged_amount":  7580,  
"fx_rate":  1,  
"usd_exchange_rate":  1,  
"current_currency":  "USD",  
"usd_type":  "international",  
"spotlight":  true,  
"creatorId":  696946511,  
"creatorName": "Escape from Hell",  
"creatorAvatar": "https://ksr-ugc.imgix.net/assets/023/572/288/d31afa951de00ed08ad0c8876cfbb0f2_original.png?ixlib=rb-4.0.2&w=160&h=160&fit=crop&v=1544981648&auto=format&frame=1&q=92&s=c7c176c48efa1a78213c52d58f7b5b98",  
"creatorUrl":  "https://www.kickstarter.com/profile/escapefromhell",  
},
```

### Kickstarter open source

You can manage search results in any language (Python, PHP, Node JS/NPM). See the FAQ or  [our API reference](https://www.apify.com/docs/api)  to learn more about getting results from this Kickstarter Search Actor. The code of this Kickstarter search actor is also open source, so you can create your own solution if you need.

# Changelog

This Actor's version history is a separate document: https://apify.com/qbie/kickstarter-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

What to search Kickstarter for

## `excludeTerms` (type: `array`):

Exclude projects containing any whole word or phrase in the title or description

## `maxResults` (type: `integer`):

Limit number of results

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

Category to search in

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

Location where you want to search

## `status` (type: `string`):

Status of the project

## `pledged` (type: `string`):

Amount pledged

## `goal` (type: `string`):

Goal

## `raised` (type: `string`):

% Raised

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

Allows you to change the

## `datasetName` (type: `string`):

Use this if you want the data to be written into named dataset, setting this will overwrite the data with each run

## `proxyConfig` (type: `object`):

Proxy group to use

## Actor input object example

```json
{
  "excludeTerms": [],
  "maxResults": 50,
  "category": "All",
  "status": "All",
  "pledged": "All",
  "goal": "All",
  "raised": "All",
  "sort": "newest",
  "datasetName": "",
  "proxyConfig": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "maxResults": 50,
    "category": "All",
    "sort": "newest",
    "proxyConfig": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("qbie/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 = {
    "maxResults": 50,
    "category": "All",
    "sort": "newest",
    "proxyConfig": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("qbie/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 '{
  "maxResults": 50,
  "category": "All",
  "sort": "newest",
  "proxyConfig": {
    "useApifyProxy": true
  }
}' |
apify call qbie/kickstarter-scraper --silent --output-dataset

```

## MCP server setup

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