{
  "openapi": "3.0.1",
  "info": {
    "title": "Grants Monitor - Grants.gov + EU Funding Calls Keyword Alerts",
    "description": "Scheduled change feed of new grant funding opportunities from grants.gov (US federal) and the EU Funding & Tenders portal. Filter by your own keywords, funding categories and award size;",
    "version": "0.1",
    "x-build-id": "goJeXWZBKS8oBtspi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datadeltas~grants-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datadeltas-grants-monitor",
        "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/datadeltas~grants-monitor/runs": {
      "post": {
        "operationId": "runs-sync-datadeltas-grants-monitor",
        "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/datadeltas~grants-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-datadeltas-grants-monitor",
        "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": {
          "sources": {
            "title": "Funding sources to monitor",
            "uniqueItems": true,
            "type": "array",
            "description": "Which official portals to watch. Default: both. If one portal is down for a run, the other still reports and the run succeeds with a warning.",
            "items": {
              "type": "string",
              "enum": [
                "grants-gov",
                "eu-funding-portal"
              ],
              "enumTitles": [
                "grants.gov (US federal grants)",
                "EU Funding & Tenders portal (Horizon Europe, DIGITAL, EuropeAid, ...)"
              ]
            },
            "default": [
              "grants-gov",
              "eu-funding-portal"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Case-insensitive substring match on each opportunity's title AND synopsis; an opportunity is emitted when ANY keyword matches. Use the terms your programme staff already search with, e.g. \"literacy\", \"food security\", \"early childhood\", \"cancer screening\". Leave empty to monitor every new call from the selected sources.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Funding categories (grants.gov only)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional grants.gov funding-activity categories, applied server-side. Has no effect on EU calls, which the portal does not classify this way.",
            "items": {
              "type": "string",
              "enum": [
                "ACA",
                "AG",
                "AR",
                "BC",
                "CD",
                "CP",
                "DPR",
                "ED",
                "ELT",
                "EN",
                "EIC",
                "ENV",
                "FN",
                "HL",
                "HO",
                "HU",
                "ISS",
                "IS",
                "IIJ",
                "LJL",
                "NR",
                "OZ",
                "O",
                "RT",
                "RD",
                "ST",
                "T"
              ],
              "enumTitles": [
                "Affordable Care Act",
                "Agriculture",
                "Arts",
                "Business and Commerce",
                "Community Development",
                "Consumer Protection",
                "Disaster Prevention and Relief",
                "Education",
                "Employment, Labor and Training",
                "Energy",
                "Energy Infrastructure and Critical Minerals (EICMM)",
                "Environment",
                "Food and Nutrition",
                "Health",
                "Housing",
                "Humanities",
                "Income Security and Social Services",
                "Information and Statistics",
                "Infrastructure Investment and Jobs Act (IIJA)",
                "Law, Justice and Legal Services",
                "Natural Resources",
                "Opportunity Zone Benefits",
                "Other",
                "Recreation and Tourism",
                "Regional Development",
                "Science, Technology and other R&D",
                "Transportation"
              ]
            }
          },
          "fundingInstruments": {
            "title": "Funding instruments (grants.gov only)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional grants.gov instrument filter, applied server-side. Pick \"Grant\" alone to exclude cooperative agreements and procurement contracts. Has no effect on EU calls.",
            "items": {
              "type": "string",
              "enum": [
                "G",
                "CA",
                "PC",
                "O"
              ],
              "enumTitles": [
                "Grant",
                "Cooperative agreement",
                "Procurement contract",
                "Other"
              ]
            }
          },
          "euStatuses": {
            "title": "EU call statuses",
            "uniqueItems": true,
            "type": "array",
            "description": "Which EU calls to include. \"Open\" = accepting applications now. \"Forthcoming\" = published with a future opening date, which is how a grant office gets months of lead time. Default: both.",
            "items": {
              "type": "string",
              "enum": [
                "open",
                "forthcoming"
              ],
              "enumTitles": [
                "Open (accepting applications)",
                "Forthcoming (announced, opens later)"
              ]
            },
            "default": [
              "open",
              "forthcoming"
            ]
          },
          "minAwardCeiling": {
            "title": "Minimum award ceiling (USD, grants.gov only)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional floor on the maximum award size, e.g. 250000 to ignore small awards. Applies to grants.gov only: a grants.gov opportunity that publishes no award ceiling (most forecasts) is skipped when this is set. EU calls are never dropped by this filter because the EU portal publishes no per-award ceiling."
          },
          "sinceDays": {
            "title": "Backfill window (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "How far back to look for opportunities. On the first run this is your backfill; afterwards it just bounds the search, because only never-seen opportunities are emitted. EU forthcoming calls always pass this window - their opening date is in the future - so the first run also delivers the announced EU pipeline, capped by Max items.",
            "default": 14
          },
          "maxItems": {
            "title": "Max items per run",
            "minimum": 1,
            "type": "integer",
            "description": "Safety cap on opportunities emitted (and billed) in one run. Anything over the cap is NOT marked as seen, so it is emitted on the next run instead of being lost.",
            "default": 500
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store holding the seen-opportunity ids. Change it to run two independent watchlists (e.g. one per programme team) from the same actor.",
            "default": "grants-monitor-state"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}