{
  "openapi": "3.0.1",
  "info": {
    "title": "Kickstarter Projects Scraper - Search Campaigns & Funding",
    "description": "Scrape kickstarter.com — records. Every record carries location the source publishes. Structured rows, ready to import into a CRM or a spreadsheet. The actor supports keyword search, location filters and controllable result limits.",
    "version": "0.1",
    "x-build-id": "ZuzMlU1ARN78S88Bv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~kickstarter-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-kickstarter-com-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/blackfalcondata~kickstarter-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-kickstarter-com-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/blackfalcondata~kickstarter-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-kickstarter-com-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "title": "🔍 Search Term(s)",
            "type": "string",
            "description": "Project search keywords (e.g. \"board game\", \"espresso\", \"graphic novel\"). Use a JSON array for several searches in one run. Leave everything empty to browse live projects (bounded by Max Results)."
          },
          "queries": {
            "title": "🔍 Search Terms (list)",
            "type": "array",
            "description": "Several search keywords, one per line. Combined with the Search Term field if both are set.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "categories": {
            "title": "🗂️ Categories",
            "type": "array",
            "description": "Category slugs (art, comics, crafts, dance, design, fashion, film-and-video, food, games, journalism, music, photography, publishing, technology, theater) or numeric category IDs (also sub-categories, e.g. 34). One search per category. Empty = all categories.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "states": {
            "title": "🚦 Project states",
            "type": "array",
            "description": "Which lifecycle states to return: live, successful, failed, canceled, upcoming, or all (= every state, one search each). Empty = live projects (the site default).",
            "items": {
              "type": "string",
              "enum": [
                "live",
                "successful",
                "failed",
                "canceled",
                "upcoming",
                "all"
              ]
            },
            "default": []
          },
          "sort": {
            "title": "↕️ Sort",
            "enum": [
              "magic",
              "popularity",
              "newest",
              "end_date",
              "most_funded",
              "most_backed"
            ],
            "type": "string",
            "description": "Result order. Empty = the site default (magic)."
          },
          "staffPicksOnly": {
            "title": "⭐ Projects We Love only",
            "type": "boolean",
            "description": "Only return projects Kickstarter marked as Projects We Love.",
            "default": false
          },
          "country": {
            "title": "🌍 Project country",
            "type": "string",
            "description": "Two-letter country code (e.g. \"GB\", \"US\"; a JSON array for several). Keeps projects whose country or location country matches. Empty = worldwide."
          },
          "locationWoeid": {
            "title": "📍 Location (WOEID)",
            "minimum": 0,
            "type": "integer",
            "description": "Restrict to one place by its Yahoo WOEID (the site discover filter woe_id, e.g. 2459115 = New York). 0 or empty = off."
          },
          "minPercentFunded": {
            "title": "📈 Min. percent funded",
            "minimum": 0,
            "type": "integer",
            "description": "Only deliver projects funded at least this much (100 = reached the goal). Max Results counts delivered rows, so the run keeps paging until enough match."
          },
          "minBackers": {
            "title": "👥 Min. backers",
            "minimum": 0,
            "type": "integer",
            "description": "Only deliver projects with at least this many backers."
          },
          "minPledgedUsd": {
            "title": "💵 Min. pledged (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only deliver projects with at least this much pledged, converted to USD."
          },
          "launchedWithinDays": {
            "title": "🗓️ Launched within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Only deliver projects launched in the last N days. 0 or empty = any."
          },
          "location": {
            "title": "📍 Location (Where ID)",
            "type": "string",
            "description": "Restrict to projects from one place by its numeric Kickstarter location ID (e.g. \"2459115\" for New York, NY; the number at the end of kickstarter.com/discover/places/... URLs). Use a JSON array for several locations. Leave empty for worldwide. A value that is not a numeric ID stops the run with an input error instead of searching worldwide."
          },
          "maxResults": {
            "title": "💯 Max Results",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum total results (0 = unlimited).",
            "default": 100
          },
          "maxPages": {
            "title": "📄 Max Pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum result pages to read per search (12 projects per page). The site stops returning pages after a fixed depth, so very broad searches are best split by keyword, category or sort.",
            "default": 50
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Paste kickstarter.com discover/search URLs; each becomes its own search task, merged and deduped by project ID, and combined with any search term, category or state you set. A project URL (/projects/creator/slug) is fetched as exactly that project (see Project URLs).",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "projectUrls": {
            "title": "🎯 Project URLs",
            "type": "array",
            "description": "Direct campaign URLs (kickstarter.com/projects/creator/slug). Each returns exactly that project with all detail groups, regardless of search ranking. A URL whose creator does not match the project is reported and skipped. Not affected by the result filters.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "fetchStory": {
            "title": "📖 Include campaign story",
            "type": "boolean",
            "description": "Adds each project's full campaign story as `story` (Markdown), `storyHtml` and `storyText` (plain text), plus `risks`, `faqs` (question and answer) and `environmentalCommitments`. One extra request per result page.",
            "default": false
          },
          "fetchDetails": {
            "title": "🧾 Include project details",
            "type": "boolean",
            "description": "Adds `rewards` (reward tiers with price, shipping, items, limits), `rewardsCount`, `addOnsCount`, `updatesCount`, `commentsCount`, `faqCount`, `tags`, `creatorBiography`, `creatorLaunchedCount`, `creatorBackedCount`, `creatorLastLogin` and `creatorWebsites`. One extra request per result page.",
            "default": false
          },
          "enrichEmails": {
            "title": "📧 Find creator contact emails",
            "type": "boolean",
            "description": "Adds `creatorWebsites` (the websites the creator lists), `emails` (addresses printed in the campaign story or on the creator's own website) and `contactEmail` (the best match, own-domain address first). Reads up to three pages of the creator's own website; social profiles are skipped. Empty when no address is published. Also turns on the project details (same request, no extra cost).",
            "default": false
          },
          "qualifyByPayment": {
            "title": "💳 Qualify creators by payment",
            "type": "boolean",
            "description": "Checks the pages of the creator's own website that the email search already reads (no extra requests) for payment processors and shop platforms (Stripe, Shopify, PayPal, Square, WooCommerce, Paddle, Lemon Squeezy, Chargebee and more). Adds `takesPayments` (true, false, or null when no own website could be read), `paymentProcessors`, `stripeLiveKey` (the public key, only if the site prints one) and `paymentConfidence` (high, medium, low). Turns on \"Find creator contact emails\".",
            "default": false
          },
          "compact": {
            "title": "📦 Compact Output",
            "type": "boolean",
            "description": "Core fields only (for AI-agent/MCP workflows).",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Exclude empty fields from output",
            "type": "boolean",
            "description": "Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental Mode",
            "type": "boolean",
            "description": "Compare against previous run state. stateKey is optional — defaults to a value derived from search inputs (queries, locations, startUrls, country) so different filter sets never share state.",
            "default": false
          },
          "stateKey": {
            "title": "🔑 State Key",
            "type": "string",
            "description": "Optional. Stable identifier for the tracked search universe. Leave empty to auto-generate from search inputs."
          },
          "skipReposts": {
            "title": "🚫 Skip Reposts",
            "type": "boolean",
            "description": "When incremental, skip listings whose content matches an expired listing from a prior run (cross-run duplicate detection).",
            "default": false
          },
          "emitUnchanged": {
            "title": "🔄 Emit Unchanged Listings",
            "type": "boolean",
            "description": "When incremental mode is on, also emit listings whose content has not changed since the last run.",
            "default": false
          },
          "emitExpired": {
            "title": "⚰️ Emit Expired Listings",
            "type": "boolean",
            "description": "When incremental mode is on, also emit listings that were seen before but are no longer found.",
            "default": false
          },
          "notifyOnlyChanges": {
            "title": "🔄 Notify Only New/Updated",
            "type": "boolean",
            "description": "When Incremental Mode is on, only send notifications for NEW and UPDATED listings. Has no effect outside incremental mode.",
            "default": false
          },
          "notificationLimit": {
            "title": "📊 Max Listings Per Notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of listings included in each notification message (1–20).",
            "default": 5
          },
          "telegramToken": {
            "title": "🔑 Telegram Bot Token",
            "type": "string",
            "description": "Telegram bot token (from @BotFather). Required for Telegram notifications."
          },
          "telegramChatId": {
            "title": "💬 Telegram Chat ID",
            "type": "string",
            "description": "Telegram chat or channel ID (e.g. \"-100123456789\"). Required when telegramToken is set."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord Webhook URL",
            "type": "string",
            "description": "Discord incoming webhook URL. Server Settings → Integrations → Webhooks → New Webhook."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack Webhook URL",
            "type": "string",
            "description": "Slack incoming webhook URL. api.slack.com/messaging/webhooks."
          },
          "whatsappPhoneNumberId": {
            "title": "📞 WhatsApp Phone Number ID",
            "type": "string",
            "description": "Your WhatsApp Business phone-number ID (numeric, from Meta dashboard). Required when whatsappAccessToken is set."
          },
          "whatsappAccessToken": {
            "title": "📱 WhatsApp Access Token",
            "type": "string",
            "description": "WhatsApp Cloud API permanent access token (System User token from Meta Business). Recipient must have messaged the business number within the last 24h (service-conversation window — free since Nov 2024)."
          },
          "whatsappTo": {
            "title": "📲 WhatsApp Recipient",
            "type": "string",
            "description": "Recipient phone in E.164 format without + (e.g. \"436641234567\"). Recipient must have messaged your business number within last 24h."
          },
          "webhookUrl": {
            "title": "🪝 Generic Webhook URL",
            "type": "string",
            "description": "Receives a JSON POST with {metadata, items} after each run. Universal escape hatch for n8n / Make / Zapier / custom backends."
          },
          "webhookHeaders": {
            "title": "📋 Webhook Headers",
            "type": "object",
            "description": "Optional JSON object of custom headers (e.g. {\"Authorization\":\"Bearer ...\"})."
          },
          "appConnector": {
            "title": "Send results to a connected app",
            "type": "string",
            "description": "Optional. Pick a connected app under Settings → API & Integrations to receive your results (including any contact details). Best-effort across MCP connectors as Apify expands its catalog."
          },
          "mcpIssueTeam": {
            "title": "Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one."
          },
          "descriptionFormat": {
            "title": "📝 Description Format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Choose which representation of the listing description to include. `all` keeps every variant; the others keep only the selected one.",
            "default": "all"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}