{
  "openapi": "3.0.1",
  "info": {
    "title": "Company & Keyword News Monitor: New Articles, Deduped",
    "description": "Watch companies and keywords in world news. Get only new articles since your last run, real publisher links, one row per story across outlets, and event tags. GDELT + your RSS feeds.",
    "version": "1.0",
    "x-build-id": "4e5fRyT9hZxThFidy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/southern-data~company-news-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-southern-data-company-news-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/southern-data~company-news-monitor/runs": {
      "post": {
        "operationId": "runs-sync-southern-data-company-news-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/southern-data~company-news-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-southern-data-company-news-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": {
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "One company per line. Write the name (\"Acme Corp\"), a domain (\"acme.com\"), both (\"Acme Corp (acme.com)\"), or name variants separated by | (\"Meta | Facebook\"). Legal suffixes (Inc, Ltd, Corp…) are also matched without them. Matched in headlines, links and (if searchArticleEntities is on) organisations named anywhere in the article. Max 200.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words or phrases, one per line, e.g. \"data breach\", \"outage\", \"layoffs\". Whole-word match, case and accents ignored; \"recruit*\" also matches recruiter/recruiting. Matched in headlines and links (and feed summaries). Max 200.",
            "items": {
              "type": "string"
            }
          },
          "matchLogic": {
            "title": "Match",
            "enum": [
              "any",
              "company_and_keyword"
            ],
            "type": "string",
            "description": "\"any\": an article matching any company or any keyword. \"company_and_keyword\": one of your companies must be in the headline or link (or the article is on its own site/feed) AND one of your keywords must be there too — a passing mention of the company in the body is not enough here.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Articles whose headline (or feed summary) contains any of these are dropped, e.g. \"stock price\", \"horoscope\".",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "new_articles",
              "all_articles"
            ],
            "type": "string",
            "description": "\"new_articles\": each run returns only stories not returned by an earlier run of this monitor (the first run looks back lookbackHours). \"all_articles\": every matching story in the window (dateFrom/dateTo or the last lookbackHours).",
            "default": "new_articles"
          },
          "monitorName": {
            "title": "Monitor name (new_articles)",
            "type": "string",
            "description": "Name of the memory used by \"new_articles\" (e.g. \"competitor-news\"). Keep it the same across runs; change it to start a fresh monitor. Optional when you run from a saved task (the task gets its own memory)."
          },
          "lookbackHours": {
            "title": "Look back (hours)",
            "minimum": 1,
            "maximum": 168,
            "type": "integer",
            "description": "\"all_articles\": the window when dateFrom is empty. \"new_articles\": how far back the FIRST run looks. Max 168 (7 days).",
            "default": 24
          },
          "dateFrom": {
            "title": "From (all_articles)",
            "type": "string",
            "description": "Start of the window: a date \"2026-10-30\" (UTC), a date-time \"2026-10-30T08:00:00Z\", or relative \"3 days\" / \"12 hours\". Any date since 19 Feb 2015. One run covers at most 7 days."
          },
          "dateTo": {
            "title": "To (all_articles)",
            "type": "string",
            "description": "End of the window (same formats). A plain date includes that whole day (UTC): From 2026-10-20 + To 2026-10-21 = 48 hours. Empty = now."
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "\"gdelt\": the GDELT Project's open index of world news (50,000–110,000 English articles a day, plus ~150,000 in other languages if you add languages). \"feeds\": the feeds in feedUrls (and company newsroom feeds if turned on). \"hackernews\": stories posted on Hacker News.",
            "items": {
              "type": "string",
              "enum": [
                "gdelt",
                "feeds",
                "hackernews"
              ],
              "enumTitles": [
                "GDELT world news index (tens of thousands of outlets)",
                "Your RSS/Atom feeds + company newsroom feeds",
                "Hacker News"
              ]
            },
            "default": [
              "gdelt",
              "feeds"
            ]
          },
          "feedUrls": {
            "title": "RSS / Atom feeds",
            "type": "array",
            "description": "Publisher or newsroom feeds to watch, e.g. \"https://techcrunch.com/feed/\". A web page link works too if it advertises a feed. Google News feeds are not accepted (Google allows them only in a personal feed reader). Max 300.",
            "items": {
              "type": "string"
            }
          },
          "feedsMatchKeywords": {
            "title": "Feeds: only items matching companies/keywords",
            "type": "boolean",
            "description": "On: feed items must match your companies/keywords like everything else. Off: every new item of your feeds is returned (exclude keywords still apply).",
            "default": true
          },
          "companyNewsroomFeeds": {
            "title": "Find company newsroom/blog feeds",
            "type": "boolean",
            "description": "For companies given with a domain (\"acme.com\"), find the news/blog feed the company publishes and return its posts. Charged as a feed read when found.",
            "default": false
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Two-letter codes, e.g. \"en\", \"de\", \"fr\", or \"any\". Other languages come from GDELT's translated stream (headlines stay in the original language; company names are matched in the English translation of the text). Each hour of the translated stream is charged separately.",
            "default": [
              "en"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchArticleEntities": {
            "title": "Also match companies named anywhere in the article",
            "type": "boolean",
            "description": "GDELT lists the organisations named in each article's full text. On: an article that mentions your company only in the body is returned too (matchedIn = \"article text\"). Off: headline and link matches only.",
            "default": true
          },
          "minArticleMentions": {
            "title": "Article-text matches: minimum mentions",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "For matches found only in the article body (matchedIn = \"article text\"): how many times the company must be named. 2 (default) drops passing mentions such as photo credits or link lists; 1 returns every article that names it once.",
            "default": 2
          },
          "dedupeStories": {
            "title": "Merge the same story across outlets",
            "type": "boolean",
            "description": "One row per story: the same headline (or 70%+ of its words) on several outlets is one row, with otherOutlets / otherUrls. Off: one row per article link.",
            "default": true
          },
          "dropOldArticles": {
            "title": "Drop old articles re-crawled today",
            "type": "boolean",
            "description": "Some sites re-publish old pages. When an article link carries a date (e.g. /2019/05/02/) older than your window, it is dropped.",
            "default": true
          },
          "excludeDomains": {
            "title": "Exclude sites",
            "type": "array",
            "description": "Domains to ignore, e.g. \"example.com\" (subdomains included).",
            "items": {
              "type": "string"
            }
          },
          "onlyDomains": {
            "title": "Only these sites",
            "type": "array",
            "description": "If set, only articles from these domains (subdomains included).",
            "items": {
              "type": "string"
            }
          },
          "includeImage": {
            "title": "Include share image link",
            "type": "boolean",
            "description": "imageUrl column (the article's share image, from GDELT).",
            "default": true
          },
          "maxArticles": {
            "title": "Max stories per run",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Newest first. In new_articles mode, stories over the limit are kept for the next run.",
            "default": 500
          },
          "selfTest": {
            "title": "Self-test (free)",
            "type": "boolean",
            "description": "Run the built-in checks (matching, de-duplication, dates, feed parsing, memory, live sources) instead of searching. Nothing is charged; the run fails if a check fails.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}