{
  "openapi": "3.0.1",
  "info": {
    "title": "Medium Articles Scraper: Tags, Authors, Publications",
    "description": "Latest Medium articles by tag, author, publication (custom domains too) or article URL, with full text and HTML, word count, reading time, tags, image and date, plus date/keyword filters. Official RSS feeds, no login or proxy. $2.00 per 1,000 articles.",
    "version": "0.1",
    "x-build-id": "Ppw4O3C5jbV4ChjWF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidyharvest~medium-articles-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidyharvest-medium-articles-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/tidyharvest~medium-articles-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tidyharvest-medium-articles-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/tidyharvest~medium-articles-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tidyharvest-medium-articles-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": {
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Medium tags, one per line: 'python', 'machine-learning', or a tag URL like https://medium.com/tag/startup. Tag feeds list the ~10 newest posts; full text is filled in from each post's author or publication feed when it is still there (see 'Fill in full text for tag results').",
            "items": {
              "type": "string"
            }
          },
          "usernames": {
            "title": "Authors (usernames or profile URLs)",
            "type": "array",
            "description": "Medium authors, one per line: '@ev', 'ev', https://medium.com/@ev or https://ev.medium.com. Returns the author's ~10 latest stories.",
            "items": {
              "type": "string"
            }
          },
          "publications": {
            "title": "Publications (slugs, URLs or custom domains)",
            "type": "array",
            "description": "Medium publications, one per line: 'better-programming', https://medium.com/towards-data-science, or a custom-domain publication like https://aiadvances.org or https://pub.towardsai.net. Returns the publication's ~10 latest stories.",
            "items": {
              "type": "string"
            }
          },
          "articleUrls": {
            "title": "Article URLs",
            "type": "array",
            "description": "Full Medium article URLs (https://medium.com/@user/title-1a2b3c4d5e6f, https://medium.com/<publication>/title-..., https://<user>.medium.com/title-..., or a custom-domain publication URL). Each is looked up in its author's or publication's feed, so it works for recent posts only (roughly the author's/publication's last 10). Short medium.com/p/<id> links are not supported.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max articles in total",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard cap on results for the whole run (also caps your cost). Shared fairly across your inputs.",
            "default": 100
          },
          "maxItemsPerFeed": {
            "title": "Max articles per feed",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap per tag/author/publication. 0 or empty = no per-feed cap (feeds hold ~10 posts anyway)."
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep only articles published on/after this date: 2026-10-01, 2026-10-01T12:00:00Z, or relative like '7 days' / '24 hours'."
          },
          "publishedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Keep only articles published on/before this date (same formats)."
          },
          "keywords": {
            "title": "Keywords (match any)",
            "type": "array",
            "description": "Keep an article only if its title, text or tags contain one of these (case-insensitive). Empty = all.",
            "items": {
              "type": "string"
            }
          },
          "fullContentOnly": {
            "title": "Only articles with full text",
            "type": "boolean",
            "description": "Skip member-only (paywalled) stories, for which Medium's feeds give only a snippet. You are not charged for skipped articles.",
            "default": false
          },
          "enrichTagResults": {
            "title": "Fill in full text for tag results",
            "type": "boolean",
            "description": "Tag feeds carry only a snippet. When on, each tag result is looked up in its author's or publication's feed to add full text, word count and reading time (free stories that are still in that feed).",
            "default": true
          },
          "includeHtml": {
            "title": "Include content HTML",
            "type": "boolean",
            "description": "Include the article body as HTML (contentHtml) next to plain text. Turn off for smaller datasets.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}