How do I search Facebook Marketplace listings by location and price via API?
Call GET /facebook/marketplace/search with query, the search center as filter_location_latitude / filter_location_longitude, a filter_radius_km, and filter_price_lower_bound / filter_price_upper_bound. To turn a city name into coordinates, call GET /facebook/marketplace/city-coordinates first.
How to do it with SocialAPIs
Prices are whole numbers in the local currency. Sort with commerce_search_sort_by (CREATION_TIME_DESCEND for newest first, PRICE_ASCEND…), filter the condition with commerce_search_and_rp_condition (new, used_like_new, used_good, used_fair), and set posted_today=true for today's listings only. Next page: end_cursor. Each search costs 1 credit.
Endpoints
GET /facebook/marketplace/search1 credit
Search Facebook Marketplace items with filters for location, price, category, condition, and more.
Params:
query,category_url,proxy_country,commerce_search_sort_by,commerce_search_and_rp_condition,filter_location_latitude,filter_location_longitude,filter_price_lower_bound,filter_price_upper_bound,filter_radius_km,posted_today,exact_match,end_cursor,fieldsMarketplace Search: docs and playgroundMCP:
facebook_marketplace→searchGET /facebook/marketplace/city-coordinates1 credit
Get GPS coordinates for a city to use as Marketplace location filters.
Params:
city(required),country,exactly_oneMarketplace City Coordinates: docs and playgroundMCP:
facebook_marketplace→city_coordinates
curl -G "https://api.socialapis.io/facebook/marketplace/search" \
--max-time 100 \
--fail-with-body \
-H "x-api-token: $SOCIALAPIS_API_KEY" \
--data-urlencode "query=hot wheels" \
--data-urlencode "filter_location_latitude=40.7142" \
--data-urlencode "filter_location_longitude=-74.0064" \
--data-urlencode "filter_radius_km=40" \
--data-urlencode "filter_price_upper_bound=100"import os
import requests
response = requests.get(
"https://api.socialapis.io/facebook/marketplace/search",
headers={"x-api-token": os.environ["SOCIALAPIS_API_KEY"]},
params={
"query": "hot wheels",
"filter_location_latitude": "40.7142",
"filter_location_longitude": "-74.0064",
"filter_radius_km": "40",
"filter_price_upper_bound": "100",
},
timeout=100,
)
response.raise_for_status()
print(response.json())// Node 18+, as an ES module (e.g. main.mjs)
async function get(url, params) {
const query = new URLSearchParams(params).toString();
const response = await fetch(query ? `${url}?${query}` : url, {
headers: { "x-api-token": process.env.SOCIALAPIS_API_KEY },
signal: AbortSignal.timeout(100000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
return response.json();
}
const data = await get("https://api.socialapis.io/facebook/marketplace/search", {
query: "hot wheels",
filter_location_latitude: "40.7142",
filter_location_longitude: "-74.0064",
filter_radius_km: "40",
filter_price_upper_bound: "100",
});
console.log(data);import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
private static final HttpClient CLIENT = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
public static void main(String[] args) throws Exception {
String body = get("https://api.socialapis.io/facebook/marketplace/search", Map.of(
"query", "hot wheels",
"filter_location_latitude", "40.7142",
"filter_location_longitude", "-74.0064",
"filter_radius_km", "40",
"filter_price_upper_bound", "100"));
System.out.println(body);
}
static String get(String url, Map<String, String> params) throws Exception {
String query = params.entrySet().stream()
.map(e -> URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8) + "="
+ URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
.collect(Collectors.joining("&"));
HttpRequest request = HttpRequest.newBuilder(URI.create(query.isEmpty() ? url : url + "?" + query))
.header("x-api-token", System.getenv("SOCIALAPIS_API_KEY"))
.timeout(Duration.ofSeconds(100))
.GET()
.build();
HttpResponse<String> response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() / 100 != 2) {
throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
}
return response.body();
}
}package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
"time"
)
func main() {
body, err := get("https://api.socialapis.io/facebook/marketplace/search", url.Values{
"query": {"hot wheels"},
"filter_location_latitude": {"40.7142"},
"filter_location_longitude": {"-74.0064"},
"filter_radius_km": {"40"},
"filter_price_upper_bound": {"100"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
func get(endpoint string, params url.Values) ([]byte, error) {
if len(params) > 0 {
endpoint += "?" + params.Encode()
}
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
if err != nil {
return nil, err
}
req.Header.Set("x-api-token", os.Getenv("SOCIALAPIS_API_KEY"))
client := &http.Client{Timeout: 100 * time.Second}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode/100 != 2 {
return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, body)
}
return body, nil
}# pip install socialapis-sdk
import os
from socialapis import Facebook
client = Facebook(api_token=os.environ["SOCIALAPIS_API_KEY"])
response = client.search_marketplace(
"hot wheels",
filter_location_latitude=40.7142,
filter_location_longitude=-74.0064,
filter_radius_km=40,
filter_price_upper_bound=100,
)
print(response)// npm install socialapis-sdk
import { Facebook } from "socialapis-sdk";
const client = new Facebook({ apiToken: process.env.SOCIALAPIS_API_KEY });
const response = await client.searchMarketplace("hot wheels", {
filter_location_latitude: 40.7142,
filter_location_longitude: -74.0064,
filter_radius_km: 40,
filter_price_upper_bound: 100,
});
console.log(response);Your API key goes in the x-api-token header (here from the SOCIALAPIS_API_KEY environment variable). Get a free key.
Tutorial: Get Facebook Marketplace listings with PythonUse it from Claude, ChatGPT or Cursor (MCP)
Good to know
listing_price.amountis a string: convert it before comparing.strikethrough_priceis set when the seller lowered the price,nullotherwise.- Price-drop alerts: re-run the same search on a schedule and compare each listing's price by
id. - Pagination:
data.page_info.has_nextandend_cursor.