{
  "openapi": "3.0.1",
  "info": {
    "title": "Academic Papers Scraper: OpenAlex, Crossref, arXiv & PubMed",
    "description": "Search scientific papers across OpenAlex, Crossref, arXiv and PubMed in one run: de-duplicated by DOI, with authors, institutions, citations, abstracts and open-access PDF links. DOI lookup in bulk and alerts for new papers on a topic.",
    "version": "0.1",
    "x-build-id": "xMj56i8hB6R9UeW6U"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/latamdatatools~academic-papers-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-latamdatatools-academic-papers-search",
        "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/latamdatatools~academic-papers-search/runs": {
      "post": {
        "operationId": "runs-sync-latamdatatools-academic-papers-search",
        "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/latamdatatools~academic-papers-search/run-sync": {
      "post": {
        "operationId": "run-sync-latamdatatools-academic-papers-search",
        "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": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Topics, keywords or titles. One per line. Each query is searched in every selected source. Use quotes for exact phrases (\"base editing\").",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Results from several sources are merged into one record per paper (same DOI, arXiv ID, PubMed ID or title). arXiv preprints are searched through OpenAlex (its arXiv source) and PubMed records through the Europe PMC API, which mirrors PubMed.",
            "items": {
              "type": "string",
              "enum": [
                "openalex",
                "crossref",
                "arxiv",
                "pubmed"
              ],
              "enumTitles": [
                "OpenAlex (250M+ works, citations, institutions)",
                "Crossref (DOI registry, all publishers)",
                "arXiv preprints (via OpenAlex)",
                "PubMed records (via Europe PMC)"
              ]
            },
            "default": [
              "openalex",
              "crossref",
              "arxiv",
              "pubmed"
            ]
          },
          "fromDate": {
            "title": "Published from (YYYY-MM-DD)",
            "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2})?$",
            "type": "string",
            "description": "Optional. Only papers published on or after this date."
          },
          "toDate": {
            "title": "Published until (YYYY-MM-DD)",
            "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2})?$",
            "type": "string",
            "description": "Optional. Only papers published on or before this date."
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "citations"
            ],
            "type": "string",
            "description": "Relevance (as ranked by each source), newest first, or most cited first.",
            "default": "relevance"
          },
          "openAccessOnly": {
            "title": "Open access only",
            "type": "boolean",
            "description": "Keep only papers with free full text (OpenAlex OA filter, Europe PMC open access for PubMed, OpenAlex OA filter for arXiv, Crossref with a Creative Commons license).",
            "default": false
          },
          "includeAbstracts": {
            "title": "Include abstracts",
            "type": "boolean",
            "description": "Abstracts are provided by the sources; some publishers keep copyright on them. Turn off for smaller rows.",
            "default": true
          },
          "dois": {
            "title": "DOIs to look up",
            "type": "array",
            "description": "Bulk DOI enrichment: one DOI (or doi.org link) per line. Each one returns the full record (OpenAlex first, Crossref as fallback). Can be combined with queries.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset with DOIs",
            "type": "string",
            "description": "ID of an Apify dataset (for example from another Actor) with a DOI field."
          },
          "csvUrl": {
            "title": "CSV URL with DOIs",
            "type": "string",
            "description": "Public CSV link or a Google Sheets link shared as \"Anyone with the link\"."
          },
          "doiField": {
            "title": "DOI column / field",
            "type": "string",
            "description": "Name of the field or CSV column that holds the DOI.",
            "default": "doi"
          },
          "includeNotFound": {
            "title": "Report DOIs that were not found",
            "type": "boolean",
            "description": "Adds a row with an error for DOIs that no source knows. Those rows are free.",
            "default": true
          },
          "onlyNew": {
            "title": "Only new papers (alerts)",
            "type": "boolean",
            "description": "Return only papers not delivered in earlier runs with the same alert name. Schedule daily or weekly to get new papers on your topics.",
            "default": false
          },
          "alertName": {
            "title": "Alert name",
            "type": "string",
            "description": "Separate memory per alert.",
            "default": "default"
          },
          "maxResultsPerSource": {
            "title": "Max results per query and source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many results to read from each source for each query (before merging duplicates).",
            "default": 50
          },
          "maxResults": {
            "title": "Max papers per run",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Total cap of unique papers returned (and charged).",
            "default": 1000
          },
          "openAlexApiKey": {
            "title": "OpenAlex API key (free, optional)",
            "type": "string",
            "description": "OpenAlex now gives a small shared daily budget per IP address without a key, which can run out on cloud IPs. A free personal key (openalex.org/settings/api) gives you your own daily budget. Without it, OpenAlex is skipped when the shared budget is used up and the other sources still work."
          },
          "ncbiApiKey": {
            "title": "NCBI API key (deprecated, ignored)",
            "type": "string",
            "description": "No longer used: PubMed records now come from the Europe PMC API, which needs no key. Kept only so older inputs keep working."
          },
          "contactEmail": {
            "title": "Your contact email (optional)",
            "type": "string",
            "description": "Sent only to Crossref (\"polite pool\", faster and more reliable) and Europe PMC, as both APIs ask. Not stored anywhere else."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}