{
  "openapi": "3.0.1",
  "info": {
    "title": "FEC Campaign Finance Scraper - Donors, PACs & Lobbying",
    "description": "Scrape US federal campaign finance from the FEC: donors (name, employer, occupation, ZIP, amount), PACs, candidates, disbursements, independent expenditures & filings - plus Senate lobbying disclosures. Filter by name, employer, state or committee. Monitor mode. Export JSON, CSV, Excel.",
    "version": "0.1",
    "x-build-id": "GQ99IDUBPiIzl7RzV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~fec-campaign-finance-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-fec-campaign-finance-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/scrapesage~fec-campaign-finance-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-fec-campaign-finance-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/scrapesage~fec-campaign-finance-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-fec-campaign-finance-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": "What to scrape",
            "enum": [
              "contributions",
              "candidates",
              "committees",
              "disbursements",
              "independentExpenditures",
              "filings",
              "lobbying"
            ],
            "type": "string",
            "description": "Which dataset to extract. FEC modes need a free api.data.gov key (see fecApiKey). The 'lobbying' mode uses the keyless US Senate LDA database and works out of the box.",
            "default": "contributions"
          },
          "fecApiKey": {
            "title": "FEC API key (api.data.gov)",
            "type": "string",
            "description": "Free key from https://api.data.gov/signup (1,000 req/hour). Required for all FEC modes; not used by the 'lobbying' mode. Leave as DEMO_KEY to try the actor, but DEMO_KEY is rate-limited to ~40 req/hour and shared — get your own free key for real runs.",
            "default": "DEMO_KEY"
          },
          "searchQuery": {
            "title": "Search query (name)",
            "type": "string",
            "description": "Name to search. For 'candidates' it matches candidate name; for 'committees' it matches committee/PAC name. Ignored by other modes (use the specific filters below)."
          },
          "contributorName": {
            "title": "Contributor / donor name",
            "type": "string",
            "description": "contributions mode: full or partial donor name (person or organization), e.g. 'Smith' or 'John Smith'."
          },
          "contributorEmployer": {
            "title": "Contributor employer",
            "type": "string",
            "description": "contributions mode: filter donors by employer, e.g. 'Google' or 'Goldman Sachs'."
          },
          "contributorOccupation": {
            "title": "Contributor occupation",
            "type": "string",
            "description": "contributions mode: filter donors by occupation, e.g. 'attorney', 'physician', 'CEO'."
          },
          "recipientName": {
            "title": "Disbursement recipient name",
            "type": "string",
            "description": "disbursements mode: filter by the payee/recipient name a committee paid, e.g. a vendor or consultant."
          },
          "committeeId": {
            "title": "Committee ID (FEC)",
            "type": "string",
            "description": "FEC committee ID (e.g. C00401224). Scopes contributions, disbursements, independent expenditures or filings to one committee/PAC/campaign."
          },
          "candidateId": {
            "title": "Candidate ID (FEC)",
            "type": "string",
            "description": "FEC candidate ID (e.g. P00000001, H4MI03185, S0...). Scopes independent expenditures or filings to one candidate."
          },
          "office": {
            "title": "Office (candidates)",
            "enum": [
              "",
              "H",
              "S",
              "P"
            ],
            "type": "string",
            "description": "candidates mode: restrict to an office.",
            "default": ""
          },
          "state": {
            "title": "State (2-letter)",
            "type": "string",
            "description": "Two-letter state code (e.g. CA, TX, NY). Filters candidates by state, committees by state, and contributions by the donor's state."
          },
          "party": {
            "title": "Party (candidates)",
            "type": "string",
            "description": "candidates mode: 3-letter party code, e.g. DEM, REP, LIB, IND, GRE."
          },
          "cycle": {
            "title": "Election cycle",
            "type": "integer",
            "description": "Even-numbered two-year cycle, e.g. 2026, 2024, 2022. Applies to candidates and independent expenditures."
          },
          "twoYearTransactionPeriod": {
            "title": "Transaction period (contributions/disbursements)",
            "type": "integer",
            "description": "Even-numbered year that anchors a 2-year transaction period for contributions and disbursements (e.g. 2026 covers 2025-2026). Defaults to 2026 if left blank."
          },
          "supportOppose": {
            "title": "Support / oppose (independent expenditures)",
            "enum": [
              "",
              "S",
              "O"
            ],
            "type": "string",
            "description": "independentExpenditures mode: keep only spending that supports or opposes the candidate.",
            "default": ""
          },
          "minAmount": {
            "title": "Minimum amount (USD)",
            "type": "integer",
            "description": "Only keep contributions / disbursements / independent expenditures at or above this dollar amount."
          },
          "maxAmount": {
            "title": "Maximum amount (USD)",
            "type": "integer",
            "description": "Only keep records at or below this dollar amount."
          },
          "minDate": {
            "title": "From date (YYYY-MM-DD)",
            "type": "string",
            "description": "Earliest receipt/disbursement/expenditure date to include (FEC schedule modes), e.g. 2025-01-01."
          },
          "maxDate": {
            "title": "To date (YYYY-MM-DD)",
            "type": "string",
            "description": "Latest receipt/disbursement/expenditure date to include (FEC schedule modes), e.g. 2026-06-30."
          },
          "registrantName": {
            "title": "Lobbying registrant (firm)",
            "type": "string",
            "description": "lobbying mode: filter by the lobbying firm / registrant name, e.g. 'Akin Gump'."
          },
          "clientName": {
            "title": "Lobbying client",
            "type": "string",
            "description": "lobbying mode: filter by the client the lobbyist works for, e.g. 'Amazon', 'Pfizer'."
          },
          "lobbyistName": {
            "title": "Lobbyist name",
            "type": "string",
            "description": "lobbying mode: filter by an individual lobbyist's name."
          },
          "issueCode": {
            "title": "Lobbying issue code",
            "type": "string",
            "description": "lobbying mode: 3-letter general issue area code, e.g. HCR (health), TAX, DEF, ENV, TEC. See the README for the full list."
          },
          "filingYear": {
            "title": "Lobbying filing year",
            "type": "integer",
            "description": "lobbying mode: filing year, e.g. 2026, 2025, 2024. Defaults to 2026 if left blank."
          },
          "filingType": {
            "title": "Lobbying filing type",
            "enum": [
              "",
              "registration",
              "report",
              "amendment",
              "termination"
            ],
            "type": "string",
            "description": "lobbying mode: restrict to a filing type.",
            "default": ""
          },
          "startUrls": {
            "title": "Start URLs (optional)",
            "type": "array",
            "description": "Optional fec.gov candidate/committee URLs or lda.senate.gov filing URLs to scrape directly. Auto-detected and routed; overrides the search filters for those records.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeCandidateTotals": {
            "title": "Include candidate financial totals",
            "type": "boolean",
            "description": "candidates mode: add receipts, disbursements, cash-on-hand and debts for each candidate's current cycle (one extra request per candidate).",
            "default": true
          },
          "includeCommitteeDetails": {
            "title": "Include committee contact details",
            "type": "boolean",
            "description": "committees mode: fetch the full committee record (treasurer, email, website, phone, full address) for each result (one extra request per committee). This is the lead-gen data.",
            "default": true
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of records to return for this run.",
            "default": 200
          },
          "monitorMode": {
            "title": "Monitor mode (only new records)",
            "type": "boolean",
            "description": "Remember records seen in previous runs (in a named key-value store) and emit only records that are new since last run. Ideal for daily Schedules that track new donors, filings or lobbying activity. Does not conflict with Apify Schedules.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for outbound requests. The default Apify Proxy is recommended for stable, retried requests; the gov APIs have no anti-bot.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}