{
  "openapi": "3.0.1",
  "info": {
    "title": "OfferUp Scraper: Local Listings, Prices, Sellers",
    "description": "Scrape OfferUp listings by keyword, category and US city, ZIP code or map point with radius: title, price, place, photo and private or dealer seller. Optional details: description, posted time, condition, seller stats, car make, model, year and VIN. New listing monitor. JSON, CSV, Excel.",
    "version": "0.1",
    "x-build-id": "CleA2psxjC4hUgcEA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~offerup-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-offerup-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/automation_craft~offerup-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-offerup-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/automation_craft~offerup-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-offerup-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Search words as you would type them on OfferUp, for example iphone, sectional couch or toyota camry. Up to 100 characters each.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Places",
            "type": "array",
            "description": "US places written as \"City, ST\" (Houston, TX or Houston, Texas), a 5 digit ZIP code (77002) or coordinates (29.7604, -95.3698). Each place is checked with OfferUp's own place search and geocoder; a city written differently from OfferUp's place search (St. Louis, MO where it writes St Louis, MO), a city without its state, or a place outside the 50 states and DC is answered with a free row that lists OfferUp's suggestions, and its searches are not read.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "OfferUp categories by id (5.1), by name (Cars & Trucks) or by full path (Vehicles > Cars & Trucks), from OfferUp's own list of 1,244 categories. A name several categories share (Accessories, Furniture) is answered with a free row that lists their ids and paths.",
            "items": {
              "type": "string"
            }
          },
          "listingUrls": {
            "title": "Listing links",
            "type": "array",
            "description": "OfferUp listing links (https://offerup.com/item/detail/<listing id>) or listing ids. Each link is read with its details and delivered as given; the search filters below do not apply to links. A listing that no longer exists is a free row.",
            "items": {
              "type": "string"
            }
          },
          "radiusMiles": {
            "title": "Radius in miles",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Distance around each place. OfferUp offers 5, 10, 20, 30 or 50 miles in most categories (30 when left empty) and 25, 80, 100, 200 or 5000 in Cars & Trucks (80 when left empty)."
          },
          "sort": {
            "title": "Order",
            "enum": [
              "newest",
              "best_match",
              "closest",
              "price_low",
              "price_high"
            ],
            "type": "string",
            "description": "newest is OfferUp's recent first order (the default, and the only order a monitor or a search without keyword or category reads). best_match repeats listings after about 12 pages; the run counts the repeats and bills each listing once.",
            "default": "newest"
          },
          "minPrice": {
            "title": "Minimum price (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Whole dollars, up to 1,000,000 (OfferUp's own bound). A listing without a price (call for price) never passes a price filter. On a search without keyword or category the range is applied to the rows by this Actor."
          },
          "maxPrice": {
            "title": "Maximum price (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Whole dollars, up to 1,000,000 (OfferUp's own bound). A listing without a price (call for price) never passes a price filter. On a search without keyword or category the range is applied to the rows by this Actor."
          },
          "conditions": {
            "title": "Condition",
            "type": "array",
            "description": "One or more of OfferUp's conditions. Leave empty for every condition. Needs a keyword or category (OfferUp's local feed takes no condition).",
            "items": {
              "type": "string",
              "enum": [
                "NEW",
                "OPEN_BOX",
                "REFURBISHED",
                "USED",
                "BROKEN",
                "OTHER"
              ],
              "enumTitles": [
                "New",
                "Open box",
                "Reconditioned",
                "Used",
                "For parts",
                "Other"
              ]
            }
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "any",
              "private",
              "dealer"
            ],
            "type": "string",
            "description": "OfferUp marks every search row as a vehicle dealer or not. dealer keeps vehicle dealers only; private keeps every other seller (private people, and shops such as furniture or appliance stores: with details on, sellerIsBusiness tells them apart). Listings left out are free.",
            "default": "any"
          },
          "vehicleMinYear": {
            "title": "Vehicle year from",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars & Trucks only (categories 5.1 and its sub categories): the earliest model year."
          },
          "vehicleMaxYear": {
            "title": "Vehicle year to",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars & Trucks only: the latest model year."
          },
          "vehicleMaxMileage": {
            "title": "Vehicle mileage up to",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Cars & Trucks only. OfferUp offers 25000, 50000, 75000, 100000, 125000, 150000, 175000 or 200000 miles."
          },
          "includePromoted": {
            "title": "Include promoted listings",
            "type": "boolean",
            "description": "OfferUp places a few promoted listings at the top of the first pages. They are real listings and are marked isPromoted; switch this off to leave them out (free).",
            "default": true
          },
          "onlyTitleMatches": {
            "title": "Only titles with the keyword",
            "type": "boolean",
            "description": "OfferUp's search also returns related listings (a case for iphone, a loveseat for couch), more so in the newest first order. Every row says titleMatchesKeyword; switch this on to leave the others out (free). A title matches when every word of the keyword starts a word of the title, after styled letters are read as plain ones.",
            "default": false
          },
          "includeDetails": {
            "title": "Add listing details",
            "type": "boolean",
            "description": "Read each delivered listing's detail and add it to the row: description, posted time, last edit, original price, condition, coordinates, category, all photos, seller id, join date, items sold, rating, verified and dealer flags, and for vehicles make, model, year, mileage, color, VIN and title status. Each such row is billed as Listing detail too.",
            "default": false
          },
          "includePrivateSellerDetails": {
            "title": "Include private sellers' personal data",
            "type": "boolean",
            "description": "Off by default. For a private seller, switch on to also get: the seller's name (sellerName) and phone number (sellerPhone) and the listing's exact coordinates (latitude, longitude) with details on, and the phone numbers and e-mail addresses the seller wrote into the title, the description and the other texts of the row, which are otherwise masked on a best effort basis ([phone number removed], [e-mail removed]; a contact written in an unusual way can stay). All of it is what OfferUp shows any visitor. Dealers' and business accounts' contact details are delivered either way; a row that cannot tell (no details read) counts as a private seller's. You are responsible for a lawful use of this personal data, GDPR and other privacy laws included.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most listing rows a run delivers (and bills), over all searches and links. Default 100.",
            "default": 100
          },
          "maxPagesPerSearch": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Results pages read per search, about 50 listings each (100 for a search without keyword or category). Default 10.",
            "default": 10
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Give a name (such as iphones-houston) to remember, across scheduled runs, every listing this monitor delivered: each run reads the newest Maximum pages per search pages of each search and delivers and bills only listings it has not delivered before. A monitor pays a small Results page fee for every results page it reads, so keep the pages small for a frequent monitor. One name belongs to one set of settings. Leave empty for a normal run."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}