{
  "openapi": "3.0.1",
  "info": {
    "title": "BODACC Alerts: New French Companies & Insolvencies",
    "description": "France BODACC alerts: new company registrations, insolvency proceedings, business sales and deregistrations by département (75 for new companies in Paris), keyword or SIREN. Monitor BODACC notices for a SIREN, only new ones, to Slack, Discord or Telegram. Export business sales to Google Sheets.",
    "version": "1.0",
    "x-build-id": "HDqAfCdrDd0rTq56o"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~france-bodacc-alerts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-france-bodacc-alerts",
        "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/accountable_eel~france-bodacc-alerts/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-france-bodacc-alerts",
        "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/accountable_eel~france-bodacc-alerts/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-france-bodacc-alerts",
        "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": {
          "keywords": {
            "title": "Keywords (optional, matched against the company name and activity)",
            "type": "array",
            "description": "Optional. One keyword per line. A notice is kept when the company name or its declared activity contains one of them. Leave empty to get every notice in the families and window you choose. Accepted formats: boulangerie, logiciel, transport. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "families": {
            "title": "Notice families",
            "enum": [
              "creation",
              "collective",
              "vente",
              "radiation",
              "creation+collective",
              "all-except-accounts"
            ],
            "type": "string",
            "description": "Which kinds of BODACC notice to return. Accounts filings (dépôts des comptes) are left out on purpose: they are very high volume and not what this feed sells.",
            "default": "creation"
          },
          "departements": {
            "title": "Départements (optional)",
            "type": "array",
            "description": "Optional. Two-digit département codes, e.g. 75 (Paris), 69 (Rhône), 2A (Corse-du-Sud). Empty means all of France.",
            "items": {
              "type": "string"
            }
          },
          "sirens": {
            "title": "Watch these SIRENs (optional)",
            "type": "array",
            "description": "Optional. Nine-digit SIREN numbers of companies you already know. Only notices for these companies are returned.",
            "items": {
              "type": "string"
            }
          },
          "sinceDays": {
            "title": "Look back (days)",
            "type": "integer",
            "description": "1 to 60. Notices published in the last N days. For a daily schedule, keep this at 3 so a weekend or a late publication is never missed.",
            "default": 3
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max notices per run",
            "type": "integer",
            "description": "Up to 2,000. Caps how many notices you get (and pay for) in one run.",
            "default": 100
          },
          "onlyNewSinceLastRun": {
            "title": "Only return notices new since the last run (monitoring)",
            "type": "boolean",
            "description": "On: only notices not returned by a previous run of the same watchlist are returned and charged. Run this on a schedule as an alert. Off: every matching notice is returned every time. Notices not seen for 60 days are forgotten.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Optional. Name this search's monitoring memory so you can tell two schedules apart, or keep one memory across an input change. Leave empty to derive one from your filters.",
            "default": ""
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After the notices are billed, each NEW notice is posted here as one message: company, SIREN, city, judgment nature and the BODACC link, with a NEW NOTICE badge. Discord or Slack: paste the channel's webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free, and a message that fails never fails the run (the row's notifyErrors says why). Stored encrypted, never logged or written to the results."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on \"Detect from the link\": discord.com links get Discord messages, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON. Pick one only to override that.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Up to 100. Above this, one \"+N more\" message says how many more notices are in the run's dataset, so a busy first run never floods the channel. 0 sends only that one summary message.",
            "default": 20
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "announcementCount",
                "announcements",
                "searchSummary",
                "monitorStatus",
                "truncated",
                "notifyErrors",
                "id",
                "family",
                "familyLabel",
                "noticeType",
                "publishedOn",
                "siren",
                "companyName",
                "legalForm",
                "activity",
                "address",
                "postcode",
                "city",
                "departement",
                "region",
                "court",
                "judgmentNature",
                "judgmentDate",
                "noticeUrl",
                "matchedKeyword",
                "isNew",
                "firstSeenAt"
              ],
              "enumTitles": [
                "Notices returned",
                "All notices (full list)",
                "Search run",
                "Monitoring status",
                "More results were available",
                "Alert delivery errors",
                "BODACC notice id",
                "Family code",
                "Notice type",
                "Notice kind (first, correction, cancellation)",
                "Published in the BODACC on",
                "SIREN",
                "Company name",
                "Legal form",
                "Declared activity",
                "Registered office address",
                "Postcode",
                "City",
                "Département code",
                "Region",
                "Commercial court (greffe)",
                "Judgment nature (procédures collectives)",
                "Judgment date",
                "BODACC notice page",
                "Keyword matched",
                "Is this notice new?",
                "First seen on a run"
              ]
            },
            "default": [
              "announcementCount",
              "announcements",
              "searchSummary",
              "monitorStatus",
              "truncated",
              "notifyErrors",
              "id",
              "family",
              "familyLabel",
              "noticeType",
              "publishedOn",
              "siren",
              "companyName",
              "legalForm",
              "activity",
              "address",
              "postcode",
              "city",
              "departement",
              "region",
              "court",
              "judgmentNature",
              "judgmentDate",
              "noticeUrl",
              "matchedKeyword",
              "isNew",
              "firstSeenAt"
            ]
          },
          "expandRows": {
            "title": "One row per notice (recommended) — turn off for one row per search instead",
            "type": "boolean",
            "description": "When on, each notice found gets its own row instead of being grouped under its search. You're still only charged once per search, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 2,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}