{
  "openapi": "3.0.1",
  "info": {
    "title": "Scraper for Facebook Marketplace",
    "description": "Better scraper for FB Marketplace",
    "version": "0.0",
    "x-build-id": "Hg9jaAnwkk2SARy5O"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/bkktor~scraper-for-facebook-marketplace/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-bkktor-scraper-for-facebook-marketplace",
        "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/bkktor~scraper-for-facebook-marketplace/runs": {
      "post": {
        "operationId": "runs-sync-bkktor-scraper-for-facebook-marketplace",
        "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/bkktor~scraper-for-facebook-marketplace/run-sync": {
      "post": {
        "operationId": "run-sync-bkktor-scraper-for-facebook-marketplace",
        "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",
        "required": [
          "searchUrls"
        ],
        "properties": {
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "One or more Facebook Marketplace search URLs to scrape.\n\nHow to build a search URL:\n1. Go to facebook.com/marketplace\n2. Use the search box and filters (location, category, price range, condition) to set up your search\n3. Once the results load, copy the full URL from your browser address bar\n4. Paste it into the URL field below and click Add\n\nExample URLs:\nhttps://www.facebook.com/marketplace/bangkok/search/?query=iphone\nhttps://www.facebook.com/marketplace/london/search/?query=sofa\nhttps://www.facebook.com/marketplace/newyork/vehicles/?maxPrice=10000\n\nYou can add multiple URLs to scrape several searches in a single run.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResultsPerSearch": {
            "title": "Max Listings Per Search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of listings to collect per search URL.\n\nHigher values use more proxy traffic and increase cost. Start with 20–50 to test your cookies are working before scaling up.\n\nEstimated cost guide:\n- 50 listings → ~$0.01–0.05\n- 500 listings → ~$0.10–0.30\n- 5,000 listings → ~$1.00–3.00",
            "default": 50
          },
          "facebookCookies": {
            "title": "Facebook Session Cookies",
            "type": "array",
            "description": "Your Facebook browser session cookies. Required — Facebook Marketplace is not accessible without being logged in.\n\nWe strongly recommend using a dedicated Facebook account created only for scraping, not your personal account — exporting cookies from a personal account can trigger Facebook's security checks and log you out.\n\nHow to get your cookies (no extension needed):\n1. Open Chrome and log in to facebook.com with your scraping account\n2. Browse to facebook.com/marketplace and click a few listings\n3. Press F12 to open DevTools, then click the Console tab\n4. Paste this snippet and press Enter:\n\ncopy(JSON.parse(JSON.stringify(document.cookie.split(\"; \").map(c => { const [name, ...val] = c.split(\"=\"); return { name: name.trim(), value: val.join(\"=\"), domain: \".facebook.com\", path: \"/\", httpOnly: false, secure: true }; }))));\n\n5. Your cookies are now copied to your clipboard as JSON — paste them into this field\n6. Check the JSON includes both \"c_user\" and \"xs\" entries; the Actor needs both to authenticate\n\n⚠️ Security warning: Your cookies give full access to your Facebook account — treat them like a password. Never share your cookies publicly."
          },
          "fetchListingDetails": {
            "title": "Fetch Listing Details",
            "type": "boolean",
            "description": "Visit each listing's detail page to extract the full item description and time posted.\n\nSeller name, price, and sold/pending status are already included for every listing without this — they come from the search results themselves. Only enable this if you specifically need the description or posted time.\n\n⚠️ This loads one additional page per listing — it will significantly increase run time and proxy cost.\n\nWhen enabled, add \"description\" and \"postedAt\" to the Output Fields list.",
            "default": false
          },
          "outputFields": {
            "title": "Output Fields",
            "type": "array",
            "description": "Which fields to include in the output dataset. Remove any fields you don't need to keep your dataset clean.\n\nAll available fields (no extra requests needed):\n- listing_id — unique Facebook listing ID\n- title — listing title\n- price — numeric price (e.g. 4500)\n- formattedPrice — price as Facebook displays it (e.g. \"฿4,500\")\n- currency — currency symbol (e.g. ฿, $, €)\n- minPrice / maxPrice — price range for range-priced listings (e.g. real estate), null otherwise\n- imageUrl — product photo URL\n- location — \"City, State\" shown on the card\n- city / state — location split into parts\n- status — \"live\", \"sold\", \"pending\", or \"hidden\"\n- isSold / isPending / isLive — status as booleans\n- deliveryTypes — e.g. [\"IN_PERSON\"], [\"SHIPPING\"]\n- sellerName — seller's display name\n- sellerId — seller's Facebook ID\n- link — direct URL to the listing\n- searchUrl — the search URL that produced this listing\n- searchIndex — index of the search URL in your input list\n- scrape_timestamp — ISO timestamp of when it was scraped\n\nOnly available when Fetch Listing Details is enabled:\n- postedAt — time since listed (e.g. \"3 hours ago\")\n- description — full item description",
            "default": [
              "listing_id",
              "title",
              "price",
              "formattedPrice",
              "currency",
              "imageUrl",
              "location",
              "status",
              "sellerName",
              "link",
              "scrape_timestamp"
            ]
          },
          "proxyConfig": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. Residential proxies are required — Facebook blocks datacenter IPs. The default setting handles this automatically.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}