{
  "openapi": "3.0.1",
  "info": {
    "title": "Goodreads Book Scraper — Author Bibliography & Series",
    "description": "Goodreads Book Scraper: Extract book titles, authors, ratings, reviews, publication dates, genres, series details, and author bibliographies. Discover complete reading lists, series order, related books, and structured data for book research and literary analysis.",
    "version": "0.1",
    "x-build-id": "dJ6OTIn9iikEjhuE0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~goodreads-book-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-goodreads-book-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/api-empire~goodreads-book-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-goodreads-book-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/api-empire~goodreads-book-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-goodreads-book-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": {
          "authorTargets": {
            "title": "✍️ Authors to expand",
            "type": "array",
            "description": "One author per line. Accepts an author name (e.g. jane austen), a Goodreads author link, or a bare author id. Each entry is expanded into that author's published titles.",
            "items": {
              "type": "string"
            }
          },
          "booksPerAuthor": {
            "title": "📖 Titles per author",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many titles to take from each author's bibliography. Example: 2 authors x 10 = up to 20 book rows plus 2 author summary rows. Defaults to 10 when left empty."
          },
          "bookSearchTerms": {
            "title": "🔎 Book search terms (optional)",
            "type": "array",
            "description": "Optional second lane: book search phrases (e.g. gothic romance) or full Goodreads search links, one per line. These produce book rows only - author summary rows are made for the author lane above.",
            "items": {
              "type": "string"
            }
          },
          "resultsPerSearch": {
            "title": "📊 Books per search term",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Target number of books for each search term above. Pages are read until this count is reached or the results run out. Defaults to 10 when left empty."
          },
          "includeAuthorProfile": {
            "title": "👤 Add author profile + summary row",
            "type": "boolean",
            "description": "ON: every book row gains authorId, authorName, authorUrl, author photo, bio, follower count and total works count, and each author lane closes with one summary row (titles collected, average rating, highest/lowest rated title, most rated title, publication span, series covered). OFF: those columns stay empty and no summary row is produced.",
            "default": true
          },
          "includeSeriesInfo": {
            "title": "📚 Add series placement",
            "type": "boolean",
            "description": "ON: every book row gains isPartOfSeries, seriesTitle, seriesUrl, seriesPlacement (the number inside the series), seriesCount and the full allSeries list. Standalone titles honestly return isPartOfSeries=false with empty series columns.",
            "default": true
          },
          "pageDelayMs": {
            "title": "⏱️ Pause between listing pages (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Milliseconds to wait between listing pages. Example: 1000 = one second. Defaults to 1000 when left empty."
          },
          "urls": {
            "title": "🧩 Legacy search terms",
            "type": "array",
            "description": "Compatibility field. Older input files that used this key keep working - the values are read as book search terms when the keyword lane above is empty.",
            "items": {
              "type": "string"
            }
          },
          "resultsPerQuery": {
            "title": "🧩 Legacy books per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Compatibility field. Used as the per-search target when the keyword lane's own count above is empty."
          },
          "proxyConfiguration": {
            "title": "🌐 Network settings",
            "type": "object",
            "description": "Optional. Leave off for the fastest start; switch it on to route requests through Apify Proxy and pick a country if you want results from a specific region."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}