{
  "openapi": "3.0.1",
  "info": {
    "title": "Medium Scraper - Articles, Tags, Authors & Full Text",
    "description": "Scrape Medium without login: search articles, tag feeds (latest, hot, top week, month, year), author and publication archives, or article links. Claps, responses, reading time, tags, author followers, plus optional full text in plain text and Markdown.",
    "version": "0.1",
    "x-build-id": "sUMN3bLIY8DimHy4I"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~medium-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-medium-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/scrapewise~medium-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-medium-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/scrapewise~medium-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-medium-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": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on Medium, one per line (for example \"rust async\" or \"product management\"). Results come in Medium's relevance order and stop at 'Max articles per input'. Each row keeps the keyword in its source column. Also accepts 'queries', 'keywords' or 'query'. Leave every list empty to run the example tag 'programming'.",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Medium tags as slugs or tag links, one per line (for example programming, data-science or https://medium.com/tag/startup). Spaces become dashes. Each tag returns up to 25 articles for every sort order chosen below. Also accepts 'tag'.",
            "items": {
              "type": "string"
            }
          },
          "tagSort": {
            "title": "Tag sort orders",
            "type": "array",
            "description": "Which tag feeds to read: Latest (default), Hot, Top this week, Top this month, Top this year or Top of all time. Medium caps each feed at about 25 articles, so pick several orders to get more articles per tag; articles that appear in more than one feed are delivered and charged once. Used only with Tags.",
            "items": {
              "type": "string",
              "enum": [
                "latest",
                "hot",
                "top_week",
                "top_month",
                "top_year",
                "top_all_time"
              ],
              "enumTitles": [
                "Latest",
                "Hot",
                "Top this week",
                "Top this month",
                "Top this year",
                "Top of all time"
              ]
            },
            "default": [
              "latest"
            ]
          },
          "authors": {
            "title": "Authors",
            "type": "array",
            "description": "Medium writers, one per line, as a username, profile link or subdomain (for example @karpathy, https://medium.com/@someone or someone.medium.com). Returns the author's articles from newest to oldest, up to 'Max articles per input'. Also accepts 'users', 'usernames' or 'profileUrls'.",
            "items": {
              "type": "string"
            }
          },
          "publications": {
            "title": "Publications",
            "type": "array",
            "description": "Medium publications, one per line, as a slug, custom domain or link (for example towards-artificial-intelligence, pub.towardsai.net or https://medium.com/better-programming). Returns the publication's latest articles, up to 'Max articles per input'. Also accepts 'publicationUrls'.",
            "items": {
              "type": "string"
            }
          },
          "articleUrls": {
            "title": "Article links",
            "type": "array",
            "description": "Specific Medium articles, one per line, as a link or the 12-character id at the end of the link (for example https://medium.com/@user/title-1a2b3c4d5e6f or 1a2b3c4d5e6f). Custom-domain articles work too. Each link returns one row. Also accepts 'startUrls', 'urls' or 'postUrls'.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max articles per input",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum articles for each keyword, tag sort order, author or publication (default 50). With 2 keywords and 50 here a run delivers up to 100 articles. You pay per article delivered, so this caps the cost of each input. Article links are always read in full.",
            "default": 50
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Only articles published on or after this date. Use YYYY-MM-DD (for example 2026-01-01) or a number of days back (30 = the last 30 days). Older articles are skipped and not charged. Leave empty for no date filter."
          },
          "includeContent": {
            "title": "Include full text",
            "type": "boolean",
            "description": "Adds the article body as plain text ('content') and Markdown ('markdown'). Member-only articles come with the preview Medium shows to logged-out readers and are flagged contentIsPreview. Off by default; when on, each article with a body is charged an extra 'Article text' event.",
            "default": false
          },
          "excludeMemberOnly": {
            "title": "Skip member-only articles",
            "type": "boolean",
            "description": "Leaves out articles behind the Medium paywall (member-only), so every row has a fully readable article. Skipped articles are not charged. Off by default.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new articles since the last run",
            "type": "boolean",
            "description": "For scheduled Tasks: remembers which articles each keyword, tag sort, author, publication and link list already delivered (in a named key-value store in your account, 'medium-scraper-only-new') and skips them on later runs. Skipped articles are not delivered, not charged and do not count toward Max articles. The first run delivers normally. Delete that store to start over. Also accepts 'onlyNewArticles'.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy, on by default (datacenter). Medium's public pages work with it; keep the default unless you have your own proxy.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}