{
  "openapi": "3.0.1",
  "info": {
    "title": "Trade Journals Scraper — AI-Ready Markdown",
    "description": "Scrapes 21 niche industry trade journals (FiercePharma, FreightWaves, the Industry Dive network, Transport Topics and more) into one LLM-ready schema. Every article arrives as clean Markdown with ads, share bars and newsletter CTAs stripped — ready for RAG. Unlisted publications work too.",
    "version": "0.1",
    "x-build-id": "Lcu82wx8PPCDc45pT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~trade-journals-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-trade-journals-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/scrapyx~trade-journals-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-trade-journals-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/scrapyx~trade-journals-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-trade-journals-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": {
          "publications": {
            "title": "Publications",
            "type": "array",
            "description": "Which trade journals to crawl. Built-in names: fiercepharma, fiercebiotech, fiercehealthcare, freightwaves, supplychaindive, biopharmadive, healthcaredive, constructiondive, utilitydive, ciodive, retaildive, marketingdive, hrdive, bankingdive, fooddive, transporttopics, supplychainbrain, medcitynews, pharmaphorum, fleetowner, logisticsmgmt. You can also type any other publication's URL (e.g. https://www.example-journal.com/) — unlisted sites fall back to a generic feed/sitemap + prose-density article extractor verified against six different CMS platforms. Paste a category archive URL (e.g. https://www.fiercepharma.com/manufacturing) to crawl just that section.",
            "items": {
              "type": "string"
            }
          },
          "articleUrls": {
            "title": "Article URLs",
            "type": "array",
            "description": "Exact article URLs to scrape directly, skipping discovery. Works on any publication, listed or not. Combine freely with 'Publications' in the same run.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Industry topics / categories",
            "type": "array",
            "description": "Keep only articles whose topic, tags, headline or URL mention one of these (e.g. Biotech, Supply Chain, M&A). Case-insensitive, any-match. Applied by this actor after discovery — only 2 of the 21 built-in publications expose a server-side category filter, so filtering here keeps the behaviour identical everywhere. The DISCOVERY_SUMMARY row reports how many articles the filter removed. Leave empty for everything.",
            "items": {
              "type": "string"
            }
          },
          "maxArticlesPerPublication": {
            "title": "Max articles per publication",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper bound on articles returned for each entry in 'Publications'. Article URLs are always fetched regardless of this cap.",
            "default": 25
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep only articles published on or after this date/time (e.g. 2026-08-01 or 2026-08-01T00:00:00Z). Articles whose date could not be determined are kept, never silently dropped."
          },
          "publishedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Keep only articles published on or before this date/time (e.g. 2026-08-30). Articles whose date could not be determined are kept, never silently dropped."
          },
          "includeRawHtml": {
            "title": "Also include raw body HTML",
            "type": "boolean",
            "description": "Add a 'contentHtml' field holding the cleaned article HTML alongside the markdown. Useful for debugging extraction; roughly triples dataset size.",
            "default": false
          },
          "minBodyChars": {
            "title": "Minimum article length (characters)",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Articles whose cleaned markdown comes out shorter than this are reported as an extraction failure rather than pushed as a row. Guards against paywall teasers being stored as if they were full articles. Lower it only if you deliberately want short posts.",
            "default": 400
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel article fetches. Once the request-interval cap below binds, raising this buys nothing.",
            "default": 5
          },
          "minRequestInterval": {
            "title": "Min seconds between request starts",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Politeness pacing, applied to request STARTS across all workers. This, not concurrency, is the honest speed control. 0 disables pacing.",
            "default": 0
          },
          "tlsProfile": {
            "title": "Starting TLS fingerprint",
            "enum": [
              "chrome124",
              "safari17_0",
              "firefox133",
              "chrome131"
            ],
            "type": "string",
            "description": "Which browser TLS fingerprint to try first. The actor rotates through the rest of the pool automatically on a block, so this only sets the starting rung — change it only if you are debugging a specific publication.",
            "default": "chrome124"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy on the shared datacenter pool. This is the default because it is included in your plan at no extra cost and this target works through it. If you start seeing blocks, challenges or empty results, switch the group here to Residential -- it uses real consumer IPs and gets through more, but Apify bills residential traffic per gigabyte, so leave it off unless you need it.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}