{
  "openapi": "3.0.1",
  "info": {
    "title": "BetaList Scraper – Startup Profiles, Founders & Contacts",
    "description": "Scrape BetaList startup profiles with founder and contact enrichment. Returns names, taglines, descriptions, topics, regions, images, websites, social links, public emails, and phone numbers.",
    "version": "1.0",
    "x-build-id": "LMQDCwqRxbjyrTIWb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~betalist-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-betalist-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/abotapi~betalist-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-betalist-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/abotapi~betalist-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-betalist-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose how to source startups. 'search' discovers startups from keywords, topics, regions or the latest feed. 'url' collects the exact BetaList pages you paste.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on BetaList (e.g. 'fintech', 'ai agents'). Each keyword becomes a search feed. Only applies when mode = search.",
            "items": {
              "type": "string"
            }
          },
          "topic": {
            "title": "Topic",
            "type": "string",
            "description": "A BetaList topic to collect. Accepts a topic slug (e.g. 'artificial-intelligence') or a full browse path (e.g. 'ai/artificial-intelligence'). Only applies when mode = search."
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "A BetaList region slug to collect (e.g. 'california', 'united-states'). Only applies when mode = search."
          },
          "boostedOnly": {
            "title": "Boosted startups only",
            "type": "boolean",
            "description": "Keep only startups flagged as Boosted on BetaList. Applies in both modes.",
            "default": false
          },
          "featuredAfter": {
            "title": "Featured on or after",
            "type": "string",
            "description": "Keep only startups featured on or after this date (YYYY-MM-DD). Requires 'Fetch detail pages' since the feature date lives on the profile page."
          },
          "featuredBefore": {
            "title": "Featured on or before",
            "type": "string",
            "description": "Keep only startups featured on or before this date (YYYY-MM-DD). Requires 'Fetch detail pages'."
          },
          "urls": {
            "title": "BetaList URLs",
            "type": "array",
            "description": "One or more BetaList URLs to collect. Supported: the latest feed, search result pages, topic/browse pages, region pages, and individual startup pages. Filter fields are ignored for startup URLs; results continue from the page number in the pasted URL. Only applies when mode = url.",
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch detail pages",
            "type": "boolean",
            "description": "Open each startup profile page to enrich records with the full description, topics, regions, feature date, screenshots and the resolved website. Adds an extra request per startup.",
            "default": true
          },
          "getContacts": {
            "title": "Enrich with contacts",
            "type": "boolean",
            "description": "Visit each startup's own website to collect public contact signals: emails, phone numbers and social profile links (LinkedIn, X, Facebook, Instagram, YouTube and more). Adds extra requests per startup.",
            "default": false
          },
          "maxItems": {
            "title": "Max startups",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of startups to save across the whole run. Set 0 for unlimited (stops at Max pages). This is the main limit.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per source",
            "minimum": 1,
            "type": "integer",
            "description": "Safety ceiling on how many pages to walk per search/URL source. Leave at the default; the run stops at Max startups first.",
            "default": 200
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Connection settings. The default works on any Apify plan; larger runs may benefit from a paid connection tier.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify then Settings then API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large collection without returning or charging for startups already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching startups as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED startups. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those startups returned (and billed). State is kept separately per mode/keywords/topic/region/URLs/filters/detail-fetch setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Name this monitoring campaign explicitly so Incremental mode's saved state survives input tweaks that don't change what you're tracking, or so two different setups deliberately share one baseline. Leave blank to auto-derive the key from mode, keywords/topic/region/URLs, filters and Fetch detail pages."
          },
          "emitUnchanged": {
            "title": "Emit unchanged startups",
            "type": "boolean",
            "description": "Incremental mode only. When off (default), a startup identical to the last run is suppressed — not returned and not billed. Turn on to return (and pay for) every unchanged startup too, e.g. to keep a full mirror of the search.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired startups",
            "type": "boolean",
            "description": "Incremental mode only. When on, a startup previously tracked but no longer found is returned once with changeType EXPIRED (and billed like any other row). Only fires after a complete, uncapped scan with no Resume in effect — a partial run never marks live startups expired.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}