{
  "openapi": "3.0.1",
  "info": {
    "title": "Förderkatalog - German Federal Grants & R&D Funding Data",
    "description": "From $0.20 per 1,000 records, no start fee. Germany's official Förderkatalog register: 301,058 federal grants and research contracts with recipient, executing body, ministry, project title, municipality key, start/end dates and the euro amount. No contact data - the register publishes none.",
    "version": "0.1",
    "x-build-id": "awKyonKjvefRz7S4m"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~foerderkatalog-grants-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-foerderkatalog-grants-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/scrapersdelight~foerderkatalog-grants-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-foerderkatalog-grants-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/scrapersdelight~foerderkatalog-grants-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-foerderkatalog-grants-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": {
          "grantNumbers": {
            "title": "Förderkennzeichen (grant numbers)",
            "type": "array",
            "description": "Grant reference numbers, e.g. \"13BDC%\" for the BMWE 13BDC programme line (40 running projects), or a complete number such as \"13BDC40010\" for one exact record. Several entries are OR-ed together. Grant numbers are unique: 301,058 records carry 301,058 distinct numbers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "recipientNames": {
            "title": "Organisation name",
            "type": "array",
            "description": "Name of the funded organisation, or of the executing institute — whichever you selected under \"Match names and places against\". Measured: \"Fraunhofer%\" 2,178 running projects, \"Helmholtz%\" 316, and both together exactly 2,494. Several entries are OR-ed.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "topicKeywords": {
            "title": "Project topic",
            "type": "array",
            "description": "Free text searched against the project title (\"Thema des geförderten Vorhabens\"). Measured: \"Wasserstoff\" wrapped to %Wasserstoff% matches 941 running projects, while the unwrapped prefix \"Wasserstoff%\" matches only 8 — the difference between a substring search and a starts-with search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "projectNames": {
            "title": "Project / programme name",
            "type": "array",
            "description": "The register's short \"Projekt\" label, which groups the sub-projects of one joint research project. This is the only sparse column in the register: 156,138 of 301,058 records (51.86%) carry one.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ministries": {
            "title": "Ministry (Ressort)",
            "type": "array",
            "description": "The federal ministry that paid. Counts are the whole register as of 2026-09-16 and sum to exactly 301,058. Note the 2025 ministry rename: research grants that older sources label BMBF are published here as BMFTR, and the literal string \"BMBF\" now returns zero records.",
            "items": {
              "type": "string",
              "enum": [
                "BMFTR",
                "BMWE",
                "BMUKN",
                "BMV",
                "BMLEH"
              ],
              "enumTitles": [
                "BMFTR - Research, Technology and Space  (193,892 records)",
                "BMWE - Economic Affairs and Energy  (48,211 records)",
                "BMUKN - Environment, Climate, Nature and Nuclear Safety  (34,290 records)",
                "BMV - Transport  (16,036 records)",
                "BMLEH - Food, Agriculture and Home Affairs  (8,629 records)"
              ]
            },
            "default": []
          },
          "projectAgencies": {
            "title": "Project agency (Administrierende Stelle)",
            "type": "array",
            "description": "The Projektträger that administers the grant on the ministry's behalf — \"PT-J%\", \"PT-DLR%\", \"PT-VDI%\", \"PTKA%\", \"VDI/VDE%\". Wildcards apply.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fundingTypes": {
            "title": "Funding type (Förderart)",
            "type": "array",
            "description": "All four values the register uses, with their whole-register counts. They sum to exactly 301,058.",
            "items": {
              "type": "string",
              "enum": [
                "Direkte Projektförderung",
                "Indirekt-spezifische Projektförderung",
                "Übrige indirekte Projektförderung",
                "Sonstige internationale Leistungen"
              ],
              "enumTitles": [
                "Direkte Projektförderung  (293,665 records)",
                "Indirekt-spezifische Projektförderung  (6,713 records)",
                "Übrige indirekte Projektförderung  (678 records)",
                "Sonstige internationale Leistungen  (2 records)"
              ]
            },
            "default": []
          },
          "programmeCodes": {
            "title": "Leistungsplansystematik code",
            "type": "array",
            "description": "The federal programme-classification code, e.g. \"B010%\" or \"ZMAN\". Filled on 301,053 of 301,058 records. Wildcards apply.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "Bundesland (federal state)",
            "type": "array",
            "description": "The 16 states, exactly as the register's own pick-list spells them. Counts are whole-register recipient-side totals from 2026-09-16; 641 records carry no state. Several entries are OR-ed: measured, Bremen 583 + Saarland 452 running projects = 1,035 for both.",
            "items": {
              "type": "string",
              "enum": [
                "Baden-Württemberg",
                "Bayern",
                "Berlin",
                "Brandenburg",
                "Bremen",
                "Hamburg",
                "Hessen",
                "Mecklenburg-Vorpommern",
                "Niedersachsen",
                "Nordrhein-Westfalen",
                "Rheinland-Pfalz",
                "Saarland",
                "Sachsen",
                "Sachsen-Anhalt",
                "Schleswig-Holstein",
                "Thüringen"
              ],
              "enumTitles": [
                "Baden-Württemberg  (46,037 records)",
                "Bayern  (57,532 records)",
                "Berlin  (19,435 records)",
                "Brandenburg  (6,740 records)",
                "Bremen  (4,721 records)",
                "Hamburg  (8,491 records)",
                "Hessen  (20,018 records)",
                "Mecklenburg-Vorpommern  (5,142 records)",
                "Niedersachsen  (24,200 records)",
                "Nordrhein-Westfalen  (55,095 records)",
                "Rheinland-Pfalz  (10,669 records)",
                "Saarland  (2,974 records)",
                "Sachsen  (17,735 records)",
                "Sachsen-Anhalt  (5,803 records)",
                "Schleswig-Holstein  (7,858 records)",
                "Thüringen  (7,967 records)"
              ]
            },
            "default": []
          },
          "cities": {
            "title": "Stadt / Gemeinde",
            "type": "array",
            "description": "Municipality name, e.g. \"Bremen\", \"München%\", \"Garching%\". Beware that the register spells the same place inconsistently (\"Garching b.München\" and \"Garching b. München\" both occur), so a wildcard is usually the right call. If you need a machine-stable geography, filter afterwards on the 8-digit recipientMunicipalityKey in the output.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Staat (country)",
            "type": "array",
            "description": "Whole country name as the register spells it in German. 300,517 of 301,058 records are \"Deutschland\"; the rest of the world totals about 500 records, led by Frankreich (64), Österreich (61), Belgien (55), Italien (55) and Israel (52).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "entityScope": {
            "title": "Match names and places against",
            "enum": [
              "recipient",
              "executingBody"
            ],
            "type": "string",
            "description": "Every record names two organisations: the legal grant recipient and the institute that actually runs the project. They are often in different cities. The register's search applies the name, city, state and country filters to ONE of them at a time — measured: Bundesland=Bremen matches 583 running projects as recipient and 788 as executing body. Both organisations are always present in the output, whichever you pick.",
            "default": "recipient"
          },
          "startsOnOrAfter": {
            "title": "Project starts on or after",
            "type": "string",
            "description": "German date, DD.MM.YYYY (ISO YYYY-MM-DD is accepted and converted). Filters on the project's start date. Measured: 01.01.2025 -> 19,666 running projects, 15.03.2025 -> 17,025. A malformed date makes the register re-render its search form with HTTP 200 and no result list at all, so this Actor validates it before sending and tells you which field is wrong."
          },
          "endsOnOrBefore": {
            "title": "Project ends on or before",
            "type": "string",
            "description": "German date, DD.MM.YYYY. Filters on the project's end date. Measured: 31.12.2026 -> 15,507 running projects, 31.12.2027 -> 26,972. Combined with the field above it becomes a containment window: starts after 01.01.2025 AND ends before 31.12.2027 -> 7,450. This is the field that finds projects about to expire."
          },
          "minAmountEur": {
            "title": "Minimum funding amount (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Federal share in euros, whole numbers. Measured: 10,000,000 and up -> 370 running projects; 1,000,000 to 2,000,000 -> 2,857. Note that 797 records in the register carry a genuine 0,00 amount; those are delivered with fundingAmountEur = 0, not null."
          },
          "maxAmountEur": {
            "title": "Maximum funding amount (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Federal share in euros, whole numbers."
          },
          "includeCompleted": {
            "title": "Include finished projects",
            "type": "boolean",
            "description": "OFF (default): only projects still running — 40,784 records as of 2026-09-16. ON: the full historical register back to the 1960s — 301,058 records. Leave it off unless you want the archive; a prospecting list wants live projects.",
            "default": false
          },
          "jointProjectsOnly": {
            "title": "Only sub-projects of a joint project",
            "type": "boolean",
            "description": "The register's \"Nur Projekte zeigen\" switch — keep only records that belong to a named joint research project (a Verbundprojekt), which is the 51.86% of the register that carries a Projekt label.",
            "default": false
          },
          "autoWildcard": {
            "title": "Wrap plain terms in wildcards",
            "type": "boolean",
            "description": "ON (default): a term you type with no % or _ in it is sent as %term%, so it behaves like a search box. OFF: your terms are sent exactly as typed, which means the register matches them WHOLE. This switch exists because the register answers a missing wildcard with HTTP 200 and \"keine Ergebnisse\" — an empty result that looks exactly like a real one. Values picked from a drop-down (ministry, state, funding type) are always sent verbatim and are never wrapped.",
            "default": true
          },
          "maxRecords": {
            "title": "Max records",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on records delivered, and therefore on records charged. 0 means no cap. The register hands back the whole matching result set in one streamed response, and this Actor hangs up as soon as your cap is met, so a small cap really is a small run. Records arrive in the register's own order, so a capped run is a sample of your filter, not a ranked pick — narrow the filters when you want a specific slice.",
            "default": 1000
          },
          "exportConcurrency": {
            "title": "Parallel export streams",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Only used when a single uncapped run would pull more than 60,000 records — the whole register is one uninterrupted 190 MB response, and a multi-megabyte body can die mid-stream while still reporting HTTP 200. Above that size the Actor splits the export on the first character of the Förderkennzeichen, which is a lossless partition (verified live: the 36 buckets summed to exactly the unpartitioned hit count) and refuses to use it on any run where that arithmetic does not reconcile. Set it to 1 to always use a single stream.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. foerderportal.bund.de has no anti-bot, no CAPTCHA, no user-agent gate and no rate limit — measured 2026-09-16: 15 rapid sequential requests all returned HTTP 200 in a flat ~1.25s, and the site serves no robots.txt at all. Datacenter is plenty. Switch to RESIDENTIAL if you pull the whole register in one stream and see the run fail on a short export.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}