# Kickstarter + Indiegogo Scraper — both in one table (`entrogix_works/crowdfunding-cross-search`) Actor

Search one theme across Kickstarter and Indiegogo and get a single merged table, ranked by backers - the one figure that means the same thing on both. Pledged amounts stay separate because only Kickstarter converts to USD. Gamefound campaigns are labelled. Unofficial.

- **URL**: https://apify.com/entrogix\_works/crowdfunding-cross-search.md
- **Developed by:** [Entrogix Works](https://apify.com/entrogix_works) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$6.00 / 1,000 project scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Kickstarter + Indiegogo in one table

Search one theme on both platforms and get a single table back, ranked by the one number that
means the same thing on both: **backers**.

### What this is not

This is **not** an overlap finder. A campaign launches on one platform or the other — they are
competitors, and cross-posting is rare. If you are looking for "which projects are on both",
the honest answer is almost always "none".

What you get instead is the merged list: everything raising money for your theme, in one place,
without having to run two actors and reconcile their field names and currencies yourself.

### Why amounts are not added up

Kickstarter reports `usd_pledged` — already converted. Indiegogo reports whatever currency the
campaign chose, and a single results page mixes `HK$`, `$` and `€`. Summing those, or taking a
median across them, produces a number that means nothing.

So every row carries:

| Field | Kickstarter | Indiegogo / Gamefound |
|---|---|---|
| `backers` | ✅ | ✅ — **compare on this** |
| `pledgedAmount` + `pledgedCurrency` | USD | the campaign's own currency |
| `pledgedUsd` | the amount | **always `null`** |
| `amountComparable` | `true` | `false` |

Filter on `amountComparable` before you total anything. The run summary totals only the USD rows
and says so.

### The verdict is allowed to be "cannot tell"

`moreBackersPerProject` in the summary reports which platform has more backers per project — but
only when the 95% confidence intervals around the two medians do not overlap. When they do, or
when either platform returned fewer than 6 projects with a backer count, it reports
**判定不能 / cannot tell** along with the reason. A per-run sample of a few dozen projects often
cannot separate the two, and saying so is more useful than a point estimate that flips next week.

### Gamefound

Indiegogo's search results include campaigns hosted on **gamefound.com** — 7 of 24 in one sample.
They are kept (dropping them would understate what the page shows) and labelled `platform:
"gamefound"`, never `"indiegogo"`.

### Input

```json
{
  "term": "board game",
  "state": "live",
  "maxItemsPerPlatform": 24
}
```

- `state` applies to Kickstarter only — Indiegogo's explore page has no equivalent filter.
  Each row carries its own `state` so you can see what you got.
- **Indiegogo serves at most 24 projects per run.** Its `page` parameter is ignored (pages 1, 2
  and 3 returned identical results when measured). Raising `maxItemsPerPlatform` only adds
  Kickstarter rows.

### When one platform fails

The run still returns the other platform's rows, and `platformsFailed` in the summary names what
broke and why. It is never silently reported as zero results. If **both** fail, the run fails —
half a comparison is not a comparison.

### Output

One dataset row per project, plus a `SEARCH_SUMMARY` record: per-platform counts, median backers
with a confidence interval, the USD-only total, the Gamefound count, and the verdict above.

Unofficial. Not affiliated with Kickstarter, Indiegogo or Gamefound.

# Actor input Schema

## `term` (type: `string`):

One theme searched on both platforms, for example "board game" or "e-bike". Required - this actor compares one thing across two places.

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

Kickstarter can filter by state; Indiegogo cannot, so Indiegogo rows always reflect what its explore page shows. Each row carries its own state so you can see which is which.

## `maxItemsPerPlatform` (type: `integer`):

You are charged per project returned. Indiegogo serves at most 24 per run no matter what you set here, so higher values only add Kickstarter rows.

## `minIntervalMs` (type: `integer`):

Pacing between page fetches on both platforms. Do not lower this.

## `useProxy` (type: `boolean`):

On by default. Indiegogo is fetched with a real browser and is more reliable behind a proxy.

## `proxyType` (type: `string`):

Only used when the proxy is enabled. Datacenter is enough for both platforms in testing.

## Actor input object example

```json
{
  "term": "board game",
  "state": "live",
  "maxItemsPerPlatform": 24,
  "minIntervalMs": 3000,
  "useProxy": true,
  "proxyType": "DATACENTER"
}
```

# Actor output Schema

## `results` (type: `string`):

Every project from both platforms, as JSON.

## `summary` (type: `string`):

Per-platform counts and median backers with a confidence interval, which platform has more backers per project (or that it cannot be told), and which platform failed if one did.

# 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 = {
    "term": "board game"
};

// Run the Actor and wait for it to finish
const run = await client.actor("entrogix_works/crowdfunding-cross-search").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 = { "term": "board game" }

# Run the Actor and wait for it to finish
run = client.actor("entrogix_works/crowdfunding-cross-search").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 '{
  "term": "board game"
}' |
apify call entrogix_works/crowdfunding-cross-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,entrogix_works/crowdfunding-cross-search"
        }
    }
}

```

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/hxEANkxyxM8pesnRr/builds/CIb0HJ6DP0mChQJAW/openapi.json
