{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Marketplace Scraper",
    "description": "Scrape public Facebook Marketplace listings from any city worldwide - no login required. Get title, price, currency, seller location, listing URL and every photo as JSON or CSV. AI identifies brand and model from listing titles in any language: German, French, Japanese, Portuguese and more.",
    "version": "1.0",
    "x-build-id": "408ckDHPkeEY9sDqe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/webdatalabs~facebook-marketplace-deal-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-webdatalabs-facebook-marketplace-deal-finder",
        "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/webdatalabs~facebook-marketplace-deal-finder/runs": {
      "post": {
        "operationId": "runs-sync-webdatalabs-facebook-marketplace-deal-finder",
        "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/webdatalabs~facebook-marketplace-deal-finder/run-sync": {
      "post": {
        "operationId": "run-sync-webdatalabs-facebook-marketplace-deal-finder",
        "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": {
          "location": {
            "title": "City",
            "type": "string",
            "description": "The city to search, resolved through Facebook's own location list. Works worldwide. Add the state or country when the name is ambiguous: 'Tucson, Arizona', 'Ottawa, Ontario', 'Cape Town, South Africa'. Marketplace searches by CITY only — a state or country name ('Florida', 'Canada') is narrowed to one city, and the city actually used is reported in every result row. If Facebook does not know the place, the run fails with suggestions instead of returning another city's listings.",
            "default": "New York"
          },
          "category": {
            "title": "Category",
            "enum": [
              "electronics",
              "vehicles",
              "all",
              "property_rentals",
              "apparel",
              "classifieds",
              "entertainment",
              "family",
              "free",
              "garden",
              "hobbies",
              "home_goods",
              "home_improvement",
              "household_sales",
              "musical_instruments",
              "office_supplies",
              "pet_supplies",
              "sporting_goods",
              "toys_games"
            ],
            "type": "string",
            "description": "What type of items to find. 'All Categories' with no search term returns the city's general feed.",
            "default": "electronics"
          },
          "searchQuery": {
            "title": "Search term",
            "type": "string",
            "description": "Filter listings by keyword, for example 'iPhone 15', 'MacBook Pro', 'lawn mower'. Leave empty to browse the whole category. A search term is required only when Category is 'All Categories'."
          },
          "maxListings": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How many listings to collect. This actor follows Facebook's own result cursor, so a busy city and a broad term can return well over a thousand — a single verified search reached 1,846. You are billed per listing delivered, so this is the number that decides what a run costs. Collection also stops early when Facebook runs out of matching listings, and the run report says which happened. Default is kept at 24 so existing saved tasks keep their current cost; raise it to pull hundreds of listings per search.",
            "default": 24
          },
          "localPickupOnly": {
            "title": "Local pickup only",
            "type": "boolean",
            "description": "Return only listings you can collect in person. Facebook mixes nationwide-shipping listings into every local feed — a verified Tucson search returned 24 listings of which only 8 were actually in Arizona, the rest shipping from Minnesota, Virginia and Florida. Turning this on applies Facebook's own shipping filter, so every row is genuinely local. Leave it off and each row still tells you, in 'shippingAvailable'.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings at or above this price, in the local currency of the city. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings at or below this price, in the local currency of the city. Leave empty for no maximum."
          },
          "identifyProducts": {
            "title": "Identify products",
            "type": "boolean",
            "description": "Detect brand, model and variant from each listing title. Turn it off and those columns are left empty. This actor does not estimate market value, profit or a deal score.",
            "default": true
          },
          "enableDeepScrape": {
            "title": "Visit listing pages",
            "type": "boolean",
            "description": "Open up to 8 individual listing pages for the seller's full description, the complete photo set and the condition Facebook has on record. Slower, and a listing page costs more traffic than the whole search that found it, so it is capped at 8 per run.",
            "default": false
          },
          "proxyCountry": {
            "title": "Proxy country",
            "type": "string",
            "description": "Two-letter ISO country code for residential proxy routing, for example US, CA, GB, DE. Auto-detected from the city when left empty."
          },
          "url": {
            "title": "Facebook Marketplace URL",
            "type": "string",
            "description": "Paste a Marketplace URL to skip location resolution and scrape it directly. The city is then whatever the URL points at and is NOT verified by this actor. Example: https://www.facebook.com/marketplace/109570449061083/electronics"
          },
          "enableDealScoring": {
            "title": "Identify products (retired key)",
            "type": "boolean",
            "description": "Former name of 'Identify products'. Still accepted so saved tasks and schedules keep running, and still honoured as an alias. Use 'identifyProducts' instead."
          },
          "minDealScore": {
            "title": "Minimum deal score (retired)",
            "type": "integer",
            "description": "Retired. This actor no longer scores deals, so this value is accepted and ignored; the run log and the OUTPUT report say so. It stays declared only so existing tasks and schedules are not rejected."
          },
          "useAuctionComps": {
            "title": "Auction comparables (retired)",
            "type": "boolean",
            "description": "Retired. Auction comparables are not used. Accepted and ignored so existing tasks and schedules are not rejected."
          },
          "radius": {
            "title": "Search radius (retired)",
            "type": "integer",
            "description": "Retired. Facebook does NOT honour a radius on its logged-out search: a New York search at 2 km and at 500 km returned the same 63 listings from the same towns, some 70 km out. It is accepted and ignored so existing tasks keep running. Use 'Local pickup only' — that is the control that genuinely narrows a feed to your area."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}