{
  "openapi": "3.0.1",
  "info": {
    "title": "BOAMP Scraper: French Public Tenders & Marches Publics",
    "description": "Scrape French national public procurement tenders from BOAMP (Bulletin Officiel des Annonces de Marches Publics), the official DILA open-data feed. Filter by keyword, CPV, department, region, buyer, date. Get buyer, deadline, estimated value, procedure and source URL. $5/1K tenders.",
    "version": "1.0",
    "x-build-id": "xb1863cImjJ8DinuV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dltik~boamp-fr-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dltik-boamp-fr-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/dltik~boamp-fr-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dltik-boamp-fr-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/dltik~boamp-fr-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dltik-boamp-fr-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": "Keywords",
            "type": "string",
            "description": "Free-text search across all tender fields (object, buyer, full notice content). Example: 'developpement logiciel', 'voirie', 'restauration scolaire'. Leave empty to get every recent tender."
          },
          "cpv": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes (8 digits). Matched against the full notice content. Examples: '72000000' (IT services), '45000000' (construction), '85000000' (health). Multiple = OR.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "department": {
            "title": "Departments (INSEE codes)",
            "type": "array",
            "description": "French department codes of the buyer. Examples: '75' (Paris), '13' (Bouches-du-Rhone), '2A' (Corse-du-Sud), '971' (Guadeloupe). Multiple = OR.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "region": {
            "title": "Region (name)",
            "type": "string",
            "description": "French region name, expanded to its departments. One of: ile-de-france, auvergne-rhone-alpes, bourgogne-franche-comte, bretagne, centre-val-de-loire, corse, grand-est, hauts-de-france, normandie, nouvelle-aquitaine, occitanie, pays-de-la-loire, provence-alpes-cote-d-azur, guadeloupe, martinique, guyane, la-reunion, mayotte."
          },
          "publishedSince": {
            "title": "Published since",
            "type": "string",
            "description": "ISO date (YYYY-MM-DD). Only tenders published on or after this date. Tip: 'today-30' for the last 30 days. Buyers typically poll daily for new tenders."
          },
          "publishedUntil": {
            "title": "Published until",
            "type": "string",
            "description": "ISO date (YYYY-MM-DD). Only tenders published on or before this date. Combine with 'Published since' for a window."
          },
          "buyer": {
            "title": "Buyer name (partial)",
            "type": "string",
            "description": "Partial public buyer name. Example: 'Mairie de Lyon', 'CHU', 'Region Bretagne', 'Ministere'."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum tenders to return (newest first). Hard cap of 10000 per run (Opendatasoft window limit) - narrow with filters for large searches. Aliases accepted: 'limit', 'max'. Each result is charged at the per-event price - start small to validate output.",
            "default": 50
          },
          "analyzeTenders": {
            "title": "AI analysis (premium)",
            "type": "boolean",
            "description": "Enrich each tender with an AI 'ai' object: a plain-language summary, the concrete deliverables, and a recommended action (bid / watch / skip). Add 'Business profile' below to also get a 0-100 relevance score per tender - turns a long result list into a ranked shortlist. Requires a paid Apify plan; billed as a separate 'tender-analyzed' event. If not on a paid plan the scrape still runs without analysis.",
            "default": false
          },
          "businessProfile": {
            "title": "Business profile (for AI relevance scoring)",
            "type": "string",
            "description": "One or two sentences describing what your company sells or does, e.g. 'Agence de developpement web et applications mobiles, 15 personnes, Lyon' or 'Entreprise de travaux de voirie et espaces verts en Occitanie'. When set (and AI analysis is on), each tender gets a relevance_score (0-100) and a one-line reason for how well it fits. Leave empty to get summaries only."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}