{
  "openapi": "3.0.1",
  "info": {
    "title": "Open Library Books Scraper",
    "description": "Open Library Books Scraper is a Python tool designed to extract book metadata, ISBNs, authors, publishers, subjects, and cover links from Open Library. It exports structured bibliographic data into clean CSV or JSON formats for library archiving, data enrichment, and research.",
    "version": "0.0",
    "x-build-id": "meGMp2nljOB8RrcyT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zerobreak~Open-Library-Books-Scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zerobreak-Open-Library-Books-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/zerobreak~Open-Library-Books-Scraper/runs": {
      "post": {
        "operationId": "runs-sync-zerobreak-Open-Library-Books-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/zerobreak~Open-Library-Books-Scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zerobreak-Open-Library-Books-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "isbn",
              "works",
              "authors",
              "subjects"
            ],
            "type": "string",
            "description": "Search books, look up ISBNs, fetch one work, search authors, or list books in a subject.",
            "default": "search"
          },
          "query": {
            "title": "Keyword query",
            "type": "string",
            "description": "Keyword for book search, or the author name when mode is authors and no author ID is set."
          },
          "title": {
            "title": "Title",
            "type": "string",
            "description": "Book title filter for search mode. Sent as the title parameter on search.json."
          },
          "author": {
            "title": "Author",
            "type": "string",
            "description": "Author name filter for search mode. Sent as the author parameter on search.json."
          },
          "subject": {
            "title": "Subject",
            "type": "string",
            "description": "Search filter, or the subject slug in subjects mode, such as science_fiction."
          },
          "language": {
            "title": "Language (3-letter code, search filter)",
            "type": "string",
            "description": "Three-letter code such as eng. Passed to search.json as the language parameter. This filter was not re-checked on 2026-10-12."
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "",
              "new",
              "old",
              "random",
              "key"
            ],
            "type": "string",
            "description": "Sort for search.json. Leave blank for relevance. new, old, random, and key are documented sort values.",
            "default": ""
          },
          "isbns": {
            "title": "ISBNs (isbn mode)",
            "type": "array",
            "description": "ISBN-10 or ISBN-13 values for isbn mode. Dashes are stripped. Each ISBN calls the verified /isbn/{isbn}.json endpoint.",
            "items": {
              "type": "string"
            }
          },
          "ids": {
            "title": "Work/author IDs or openlibrary.org URLs",
            "type": "array",
            "description": "Work IDs such as OL45804W, author IDs such as OL26320A, or full openlibrary.org URLs.",
            "items": {
              "type": "string"
            }
          },
          "includeEditions": {
            "title": "Include editions (works mode)",
            "type": "boolean",
            "description": "On works mode, attach up to 20 editions from /works/{id}/editions.json. Off by default to keep the run small.",
            "default": false
          },
          "includeRatings": {
            "title": "Include ratings and reading-shelf counts",
            "type": "boolean",
            "description": "Fetch /ratings.json and /bookshelves.json. In search mode this stays off when max results is above 200, because those are two extra calls per book.",
            "default": true
          },
          "includeAuthorWorks": {
            "title": "Include author's works (authors mode)",
            "type": "boolean",
            "description": "On authors mode, attach one page of works from /authors/{id}/works.json. Off by default.",
            "default": false
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Free cap 5,000. Open Library asks not to use the API for bulk downloads. Use their monthly dumps for a full catalog.",
            "default": 100
          },
          "requestsPerSecond": {
            "title": "Requests per second",
            "minimum": 0.2,
            "maximum": 3,
            "type": "number",
            "description": "Open Library allows 3 requests per second for identified clients. Default is 2. A 403 or 429 waits 60 seconds, then cuts this rate in half.",
            "default": 2
          },
          "contactEmail": {
            "title": "Contact email for User-Agent (recommended)",
            "type": "string",
            "description": "Open Library asks for a contact in the User-Agent. Leave blank to use BigiByteResearch/1.0 (https://bigibyte.com; research@bigibyte.com)."
          },
          "timeoutSecs": {
            "title": "Run timeout (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Stop the run after this many seconds. Default 300. Maximum 3600.",
            "default": 300
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Per-request timeout. Open Library search often takes 2 to 4 seconds, so the default is 30.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Open Library forbids spreading requests across many IPs, so this stays off. If you enable it, the actor uses one proxy URL for the whole run and does not rotate.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}