# April 28, 2026 Source: https://docs.lobstr.io/changelog/2026-04-28 API updates shipped April 28, 2026 ### New * **Crawler chaining** — a squid can now automatically feed its results into a second crawler as soon as a run completes. Configure a chain on any squid by setting a `chain` object with the following fields: | Field | Type | Description | | - | - | - | | `target_crawler` | string | Slug of the crawler that will receive the results as inputs | | `field_map` | object | Maps a result field from the source to an input param on the target (e.g. `{"url": "url"}`) | | `autostart` | boolean | If `true`, the downstream run starts immediately. If `false`, tasks are queued and the run is left paused for manual review. Defaults to `true` | | `cluster_settings` | object | Optional — pre-configure the downstream squid's `name` and `concurrency` on first creation | * **`GET /v1/squids/{id}`** — response now includes a `chain` object when a chain is configured on the squid * **`GET /v1/runs`** — runs triggered by a chain now include `"origin": "chain"` in the response # May 6, 2026 Source: https://docs.lobstr.io/changelog/2026-05-06 API updates shipped May 6, 2026 ### New * **Per-function credit breakdown on runs** — the Credits tab on every run page now shows a full breakdown of how credits were spent across base scraping and any enrichment functions (phone numbers, emails, images, etc.). Includes a distribution chart, a cost-by-function table with percentage bars, and a cost insight callout when one function dominates spend. * **Credits Usage page** — a new dashboard page showing your credit consumption history (7-day, 30-day, and monthly views) and the top 10 squids by credit usage for the selected period. * **`GET /v1/runs/{run_hash}/credits`** — new endpoint returning the per-function credit breakdown for a run: `breakdown`, `total_credits`, `total_results`, `rates`, `base_function_label`, and `filter_breakdown`. See the [API reference](/docs/get-run-credits) for the full schema. ### Improved * **Transparent credit attribution** — credits are now tracked and reported per function. Base scraping and each enrichment function (e.g. `get_phone_numbers`, `extract_emails_from_website`, `fetch_business_images`) are billed and displayed separately, so you can see exactly what drives cost on each run. ### Fixed * **Filter-skipped results no longer billed** — results discarded by scraper-side filters (closed status, website filter, geo match, category match) were previously counted against the base credit charge. They are now correctly excluded from billing. # May 12, 2026 Source: https://docs.lobstr.io/changelog/2026-05-12 API updates shipped May 12, 2026 ### New * **`GET /v1/credits/modules`** — new endpoint returning a per-module, per-function credit breakdown aggregated across all your completed runs. Accepts an optional `?days=N` query parameter to restrict to the last N days. * **Google Maps: neighborhood field** — business results from the Google Maps Leads Scraper now include a `neighborhood` field extracted from the address component. * **Google Maps: structured attribute fields** — four new JSONB fields added to Google Maps results: `service_options`, `accessibility`, `highlights`, and `payment_methods`. Each is an array of `{name, available}` objects scraped from the detail page. * **Google Maps: TikTok, WhatsApp, and Pinterest social links** — the Google Maps Leads Scraper now extracts TikTok, WhatsApp, and Pinterest profiles from business websites, in addition to the existing Facebook, Instagram, Twitter, and LinkedIn links. ### Improved * **Vinted: `max_results` per task** — the Vinted Products Scraper now supports a `max_results` parameter to cap the number of results collected per search URL. ### Fixed * **LaCentrale: hour-based `fetch_since` rejected** — the LaCentrale scraper now rejects `fetch_since` values with hour precision (e.g. `1h`, `6h`) since the platform only provides date-level timestamps. Use day-based values (`1d`, `7d`) instead. * **Export: memory usage on large runs** — the CSV export pipeline no longer holds two copies of the data in memory simultaneously. Runs with millions of results previously caused OOM restarts; this is now fixed. # May 19, 2026 Source: https://docs.lobstr.io/changelog/2026-05-19 API updates shipped May 19, 2026 ### New * **Yelp Reviews Scraper** — new public scraper to collect all reviews from any Yelp business page. Supports filtering by star rating, sort order (`Newest First`, `Oldest First`, `Highest Rated`, `Lowest Rated`, `Elites`), and keyword search inside review text. See the [Yelp Reviews](/examples/yelp-reviews-scraper/add-tasks) example. ### Improved * **Pages Jaunes: major scraper overhaul** — the Pages Jaunes Companies Search Export scraper now collects significantly more data per listing when enrichment functions are enabled. New result fields include: `opening_hours`, `latitude`, `longitude`, `is_verified`, `images`, `payment_methods`, `prestations`, `products`, `brands`, `accepts_quote_requests`, `listing_type`, `raison_social`, `forme_juridique`, `multi_activite`, `external_links`, `autres_denominations`, `nombre_etablissements`, and `reviews` (up to 20 most recent). ### Fixed * **Twitter User Tweets: `name` and `username` fields** — the scraper was returning incorrect or swapped values for these two fields. Both are now correctly populated. * **Trustpilot Reviews: non-existent URLs** — URLs that returned no results no longer cause the run to error out. # May 26, 2026 Source: https://docs.lobstr.io/changelog/2026-05-26 API updates shipped May 26, 2026 ### New * **Reddit Scraper** — new public scraper to collect posts, comments, user profiles, and subreddit metadata from Reddit. Supports post URLs, subreddit URLs, user profiles, global search, and subreddit search. Configurable sort order per input type (`sort_comments`, `sort_search`, `sort_subreddit`), `fetch_since` filtering, and options to skip posts or skip comments. See the [Reddit Scraper](/examples/reddit-scraper/add-tasks) example. ### Improved * **Google Maps Reviews: rating filter and content filters** — you can now filter reviews by star rating using `rating_filter` (`All`, `Minimum rating`, or `Exact rating`) combined with `min_rating_score` and `max_rating_score`. Two new boolean flags let you skip reviews with no text (`skip_reviews_without_text`) or no images (`skip_reviews_without_image`). * **Yelp Search: keyword + location input and filter params** — tasks now accept `keyword` and `location` (with optional `country`) as an alternative to a full URL. Squid-level filter params have been added: `sort`, `distance`, price tiers (`price_1`–`price_4`), and Boolean flags for `open_now`, `hot_and_new`, `good_for_kids`, `good_for_groups`, `free_wifi`, `dogs_allowed`, `wheelchair_accessible`, `open_to_all`, `accepts_credit_cards`, `accepts_cryptocurrency`, `accepts_apple_pay`, and `offers_military_discount`. * **Sales Navigator Leads: `open_to_work` and `twitter_url` fields** — the scraper now exports whether a person has the LinkedIn Open To Work badge enabled and their Twitter/X profile URL (if linked on their LinkedIn profile). ### Fixed * **Instagram Post Comments: duplicate results** — comments were occasionally returned multiple times in the same run. Fixed. * **ParuVendu: pagination beyond page 5** — pages 6 and beyond were returning 404 errors. Fixed by appending the required `allp=1` parameter to paginated URLs. * **Immoweb: XSRF token lost on proxy rotation** — session token was invalidated after proxy switches, causing requests to fail mid-run. Fixed. * **Instagram Posts: CSRF token invalidated by API calls** — CSRF token was being dropped after certain API responses, causing authentication failures. Fixed. * **Leboncoin Listing Status: DataDome 403s** — the status checker was blocked by DataDome anti-bot protection. Switched to a browser-based client that correctly handles the challenge. * **PAP: TLS failures on datacenter proxy** — proxy-related SSL errors now trigger an automatic retry. # June 2, 2026 Source: https://docs.lobstr.io/changelog/2026-06-02 API updates shipped June 2, 2026 ### Improved * **Instagram scrapers rebuilt** — Instagram Posts, Instagram Profile, and Instagram Reels scrapers have all been rebuilt to work with Instagram's current API. Single-post URLs are now also handled correctly in the Posts scraper. * **Credit endpoints: `status` and `is_deleted` fields** — `/v1/squids/{hash}/credits` rows now include a `status` field showing the run's final state. `/v1/credits/squids` rows now include an `is_deleted` flag and retain deleted squids in the list for 30 days. * **Reddit Scraper: improved reliability** — browser upgraded to curl\_cffi with Chrome impersonation; proxies are now rotated automatically on 403 blocks. ### Fixed * **`fetch_since`: seconds precision in absolute dates** — absolute `fetch_since` values that include seconds (e.g. `2026-05-01 12:00:00`) are now parsed and validated correctly. * **`fetch_since`: clamped to maximum allowed range** — extremely large `fetch_since` durations no longer cause overflow errors. * **Instagram Post Comments: session expiry handling** — a dead session now correctly raises `cookies_expired` instead of triggering a 429 retry loop. * **TikTok Video: WAF bypass updated** — the previous DataDome bypass has been replaced with correct SlardarWAF handling to fix blocked requests. * **YouTube Channel Emails: page parsing fixed** — `ytInitialData` is now extracted from the full page body rather than an XPath text node, fixing failures on recent page layouts. * **SeLoger: preserve `annonce_id`** — listings whose detail page JSON omits the ID field no longer lose their `annonce_id`. * **ParuVendu: handle 404 on list pages** — 404 responses on paginated list pages are now handled gracefully. * **PAP: retry on connection timeouts** — proxy-related connection timeouts now trigger an automatic retry with a fresh proxy. * **Leboncoin Auto Message Sender: daily quota lock corrected** — the message rate-limit cooldown was being applied for the wrong duration. It is now correctly locked for 24 hours to match the documented daily limit. * **Yelp Reviews & Yelp Search: Cloudflare tunnel errors handled** — 521–524 proxy tunnel errors from Cloudflare now trigger an automatic retry instead of failing the task. * **Idealista: browser impersonation updated** — the scraper now uses an updated browser fingerprint to handle Idealista's current bot-detection layer. # June 9, 2026 Source: https://docs.lobstr.io/changelog/2026-06-09 API updates shipped June 9, 2026 ### New * **LinkedIn Profile & Email Scraper (No Login)** — new public scraper to collect full LinkedIn profile data without requiring a LinkedIn account. Returns 40+ fields including work experience, education, skills, certifications, and contact details. Enable `email_enrichment` to find verified email addresses. Accepts a profile URL or bare slug. See the [LinkedIn Profile & Email Scraper (No Login)](/examples/linkedin-profile-email-scraper-no-login/add-tasks) example. * **Leboncoin Boutiques Scraper** — new public scraper to collect store/boutique listings from Leboncoin's business directory. Returns store name, address, GPS coordinates, SIREN/SIRET, opening hours, phone number, ratings, and sector. Enable `get_details` for enriched store data and `get_phone_numbers` to retrieve phone numbers. See the [Leboncoin Boutiques Scraper](/examples/leboncoin-boutique/add-tasks) example. * **LinkedIn Posts Scraper** — new public scraper to collect posts from any LinkedIn profile, company page, or direct post URL. Returns full post content, author details, engagement counts (likes, comments, shares), reaction breakdown, hashtags, mentions, top comments, and rich media details. Supports `fetch_since` filtering to collect only recent posts. See the [LinkedIn Posts Scraper](/examples/linkedin-posts-scraper/add-tasks) example. ### Fixed * **Google Maps Leads: neighborhood and structured attribute columns** — the `neighborhood`, `tiktok`, `whatsapp`, `pinterest`, `service_options`, `accessibility`, `highlights`, and `payment_methods` fields were present in results but not placed correctly in the exported columns. Fixed. * **Yelp scrapers: proxy tunnel errors** — Yelp Reviews and Yelp Search now retry automatically on Cloudflare proxy tunnel errors (521–524). * **TikTok Video: header sanitization after WAF solve** — residual solver headers were leaking into post-challenge requests. Fixed. * **PAP: Cloudflare managed challenge on pagination** — region-search paginated pages that hit a Cloudflare managed challenge are now solved and retried correctly. * **Instagram Profile: inaccessible profiles** — profiles that return an access-restricted page no longer cause the run to error; they are now skipped gracefully. # June 16, 2026 Source: https://docs.lobstr.io/changelog/2026-06-16 API updates shipped June 16, 2026 ### Improved * **Google Maps Leads: new filters and result fields** — added `max_rating` (upper bound on star rating), `min_reviews`, `max_reviews` (review count range), `exact_name_match` (target a specific brand or chain), `phone_filter`, and `verified_filter` (owner-claimed listings). New result fields: `owner_posts`, `customer_posts`, `image_categories`, `menu_items`, `is_verified`, `kgmid`, `reviews_link`, `name_for_emails`, `streetview_url`, `county`, `state_code`, `region`, `timezone`, `owner_name`, `owner_link`, `popular_times`, `popular_times_live`, `booking_link`, `actions`, `order_providers`, `reviews_tags`, and `people_also_search`. * **Twitter Search Results: `fetch_since` support** — use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`) to stop scraping when tweets older than the threshold are reached. Works best with Latest search URLs (`&f=live`). Also added `fetch_since_timezone` and `max_unique_results_per_run`. * **LinkedIn Posts Commenters & Likers: `max_results` and `max_unique_results_per_run`** — cap the number of engagers collected per post or across the entire run. ### Fixed * **Sales Navigator Profile: positions scraping** — work experience entries were being parsed incorrectly. Fixed. * **Sales Navigator Companies: re-login crash** — an `AssertionError` after automatic re-login no longer interrupts runs. * **Sales Navigator email enrichment** — enrichment requests were failing silently in some cases. Fixed. * **LinkedIn Posts Commenters & Likers: result deduplication** — commenters/likers were occasionally duplicated in exported results. Fixed. * **TikTok Top Ads: industry filter IDs** — incorrect internal IDs were being sent for several industry categories, causing filter to have no effect. Fixed. * **Leboncoin listings: 0 results** — a parsing change on Leboncoin caused some search pages to return 0 results. Fixed. * **Leboncoin Boutiques: escape sequence parsing** — invalid escape sequences in store descriptions caused parsing errors. Fixed. * **ParuVendu listings: pycurl stream error** — intermittent stream errors on listing pages are now caught and retried. Fixed. * **PAP: connection retries** — base-level `ConnectionError` exceptions from `curl_cffi` are now retried automatically. Fixed. * **LaCentrale Listing Status Checker: DataDome bypass** — migrated to a more reliable DataDome bypass path; improves success rate on listing status checks. ### Platform * **Export: JSON and JSONL formats** — run results can now be downloaded as `.json` (array) or `.jsonl` (newline-delimited JSON) in addition to CSV and XLSX. * **Export: field selection** — use `fields` to select a subset of columns, or `omit` to exclude specific columns from exported files. * **Export: XLSX download** — XLSX is now available as a direct download format when exporting run results. * **Export: faster XLSX generation** — switched to `xlsxwriter` for XLSX exports; large files generate significantly faster. * **Export: background conversion for large files** — XLSX exports over Excel's row limit (\~1 M rows) are rejected upfront with a clear error. Large exports are offloaded to a dedicated background queue so the API response is not blocked. * **Export: live progress** — background export conversion progress is now surfaced in real time. # June 23, 2026 Source: https://docs.lobstr.io/changelog/2026-06-23 API updates shipped June 23, 2026 ### Improved * **Yelp Reviews: `fetch_since`, language filter, owner replies, and Elite fields** — added `fetch_since` to stop scraping when reviews older than the threshold are reached (relative: `24h`, `7d`; absolute: `YYYY-MM-DD HH:MM:SS`). Added `language` to filter reviews by locale (ISO 639-1 code). New result fields: `reply_text`, `reply_datetime`, `reply_timestamp` (owner replies); `is_elite`, `user_elite_years` (Elite reviewer status). Reaction columns renamed to match the current Yelp UI: `useful_count` → `helpful_count`, `funny_count` → `thanks_count`, `cool_count` → `love_this_count`; added `oh_no_count`. * **Pages Jaunes: `street_address` field** — the street-level portion of the address is now returned as a separate `street_address` field alongside `full_address`. ### Fixed * **LinkedIn Profile: geo location** — the location field was incorrectly populated in some profiles. Fixed. * **Sales Navigator Companies: pagination on negative search totals** — a crash when the API returned a negative total count is now handled by falling back to `has_next_page`-based pagination. Fixed. * **LaCentrale (cars): DataDome bypass** — upgraded to the new DataDome bypass path with macOS/Chrome 141 identity and cookie warming; improves listing scrape reliability. * **Leboncoin Auto Message Sender: sliding-window message quota** — replaced the flat 30-message/day lock with a sliding-window quota, reducing false throttling on accounts that spread sends throughout the day. # June 30, 2026 Source: https://docs.lobstr.io/changelog/2026-06-30 API updates shipped June 30, 2026 ### Improved * **SeLoger: new listing fields** — added `agency_company_name`, `agency_siret`, `property_sub_type`, `is_new`, `plot_surface`, `transport`, `has_brokerage_fee`, `listing_creation_date`, and `listing_update_date`. These fields are returned directly from search results without requiring `get_annonce_details`. Also added `max_unique_results_per_run` parameter. * **Sales Navigator Leads: `split_search`, `skip_collected_leads`, `fetch_since`, and more** — `split_search` breaks large searches into sub-searches to collect beyond the 2,500-lead cap; `skip_collected_leads` skips leads already in your database for faster incremental runs; `fetch_since` stops scraping when leads older than the threshold are reached (relative: `24h`, `7d`; absolute: `YYYY-MM-DD HH:MM:SS`). Also added `start_page`, `max_unique_results_per_run`, `fetch_since_timezone`, and `get_profile_details`. New result fields: `recently_hired`, `pending_invitation`, `current_role_description` (requires `get_profile_details`), and `banner_url` (requires `get_profile_details`). * **Realtor: improved scraper reliability** — updated bypass logic and listing detail extraction. ### Fixed * **Google Maps Leads: email and website filter conflict** — enabling `extract_emails_from_website` alongside `website_filter: "without_website"` or `skip_without_email` produced conflicting conditions. Fixed. * **Google Maps Reviews: translated text extraction** — the `translated_text` and `original_text` fields were using incorrect field index offsets; both are now extracted correctly. * **Instagram Post Comments: cookie expiration** — expired session cookies now trigger a re-authentication instead of failing the run. Fixed. * **SeLoger: missing title and description on some listings** — `title`, `description`, `dpe`, and `bedrooms_count` were absent on results from classified-search paths. Fixed. * **Facebook Group Posts: session invalidation on proxy change** — runs using multiple accounts no longer rotate the proxy mid-session, preventing unexpected logouts. Fixed. * **Sales Navigator Companies: stale search parameter crash** — an expired `recentSearchParam` no longer causes a permanent 500 error; it is refreshed automatically. Fixed. # July 7, 2026 Source: https://docs.lobstr.io/changelog/2026-07-07 API updates shipped July 7, 2026 ### Improved * **Google Maps Reviews: `review_origin` filter** — new parameter to filter reviews by source. `All sources` (default) collects both Google reviews and aggregator reviews; pass a specific aggregator name to restrict to that source only. * **Instagram Posts: `enrich_comments` toggle** — new boolean parameter (default `true`) that collects up to 15 latest comments per post. Disable for significantly faster runs when comments are not needed. New result fields: `is_video`, `mentions`, `owner_profile_pic_url`, and `source_url`. * **SeLoger: agency and property detail fields** — added `agency_address`, `agency_city`, `agency_zipcode`, `agency_rating`, `agency_reviews`, `picture_classifications` (AI-labelled photo array), `floorplan_pictures`, `year_of_construction`, `building_state`, `previous_price`, and `is_address_published`. * **Leboncoin: seller profile enrichment** — added `seller_registered_at`, `seller_reply_rate`, `seller_reply_time_text`, `seller_presence_status`, `seller_presence_last_activity`, `seller_badges`, `seller_total_ads`, `seller_feedback_scores`, `seller_profile_picture_url`, and `seller_description`. Applies to Leboncoin Iter Listings and Leboncoin Iter Listings With Phone. * **Leboncoin: vehicle detail fields** — extracted `mileage`, `regdate`, `fuel`, `gearbox`, `critair`, `issuance_date`, `condition`, `brand`, `model`, `vehicule_color`, `doors`, `seats`, `horse_power_din`, `horse_power`, `cubic_capacity`, `cycle_type`, and `cycle_licence` directly from listing details for vehicle category listings. ### Fixed * **Reddit: 403 cookie handshake** — fixed Chrome version mismatch in the cookie handshake flow that caused 403 errors on Reddit scraping runs. * **Trustpilot Reviews: bad URL handling** — malformed or redirected Trustpilot URLs no longer crash the scraper; they are now detected and skipped with an error log. * **Realtor: too-long error** — fixed an issue where overly long listing descriptions triggered a field truncation error. * **Google Maps Reviews: browser improvements** — switched to SmartProxy datacenter pool and CurlCffiBrowser for improved response consistency and 100% owner response rate. * **Sales Navigator Leads: removed `fetch_since`** — the `fetch_since` and `fetch_since_timezone` parameters have been removed from the backend; they are no longer supported. # July 14, 2026 Source: https://docs.lobstr.io/changelog/2026-07-14 API updates shipped July 14, 2026 ### Improved * **Reddit: 4 new parameters and 33 new result fields** — new params: `max_depth` (limit comment nesting depth), `keyword` (auto-constructs search URLs), `post_type` (filter by link/image/video/self), `search_comments` (search inside comment bodies). New result fields include engagement metrics (`upvote_ratio`, `score_per_hour`, `comment_to_score_ratio`, `is_high_engagement`, `age_hours`), post metadata (`locked`, `archived`, `stickied`, `is_video`, `is_gallery`, `media_url`, `thumbnail`, `body_html`, `body_length`, `shortlink`, `edited`, `edited_at`, `num_crossposts`), author details (`author_flair`, `author_premium`, `gilded`, `is_original_content`), and subreddit stats (`subreddit_subscribers`, `suggested_sort`, `crosspost_parent_id`). * **Instagram Profile: `discovery_mode` and 10 new result fields** — new `discovery_mode` param expands scraping to each profile's related accounts (trace paths with `hop_depth` and `discovered_from`). New fields: `latest_igtv_video_5-12`, `email_address`, `avg_engagement`, `bio_hashtags`, `post_hashtags`, `biography_with_entities`, `business_address`, `discovered_from`, `hop_depth`. * **Trustpilot Reviews: 9 new result fields** — added `review_link`, `business_unit_id`, `review_verification_source`, `review_sentiment` (AI-classified: positive/neutral/negative), `owner_reply_updated_date`, `company_name`, `company_category`, `company_page_url`, `page_number`. * **Realtor: `property_details` mode with 120+ new result fields** — new `property_details` param triggers a detail-page fetch per listing to collect: full photo gallery with AI room tags (`photo_tags`), description text, price/tax history, building permits history, nearby schools, spec sheet, amenity tags, bath/bed/sqft breakdowns, risk scores (flood, fire, noise, FEMA zone), agent and broker metadata, geo extras (`street_direction`, `search_areas`, `hot_market_badge`), and deal flags. Also added `keyword` filter param. * **Facebook Group Posts: `max_results` and `max_unique_results_per_run` parameters** — control how many posts are collected per group and across the entire run. ### Fixed * **TripAdvisor Restaurants: 401 and DataDome bypass** — updated session handling to resolve 401 errors and improve DataDome challenge bypass. * **XLSX export: silent column drops** — very long PICTURES or URL cell values were silently causing columns after them to be dropped from XLSX exports. Fixed. * **Google Maps Leads: review-count recovery** — when a listing omitted review counts from the search results page, the scraper now fetches them from the detail page. # July 21, 2026 Source: https://docs.lobstr.io/changelog/2026-07-21 API updates shipped July 21, 2026 ### Improved * **Facebook Marketplace Scraper: now publicly available** — the scraper is now open to all users. Collect listings from any Marketplace search URL, optional listing detail pages (description, seller info, precise location), and structured listing attributes. See the [Facebook Marketplace Scraper docs](/examples/facebook-marketplace-scraper/add-tasks). * **Sales Navigator Companies: custom list and All Saved Accounts support** — the scraper now accepts custom company list URLs (`/sales/lists/company/...`) and the All Saved Accounts dashboard URL (`/sales/accounts/dashboard`) in addition to search URLs. * **LinkedIn Profile (No Login): 6 new result fields** — added `test_scores`, `show_premium_subscriber_badge`, `memorialized`, `supported_locales`, `multi_locale_headline`, and `multi_locale_summary`. ### Fixed * **Sales Navigator Leads: false cookie expiration** — fixed a regression that incorrectly flagged valid sessions as expired, causing unnecessary login retries. * **TripAdvisor Restaurants: 401 error** — resolved a session handling issue that caused 401 errors on restaurant scraping runs. * **TripAdvisor Reviews: 401 error** — same session fix applied to the reviews scraper. * **Trustpilot Reviews: 403 error** — fixed a 403 rejection caused by a stale request signature. * **TikTok Top Ads: transient error handling** — the scraper now pauses on TikTok 50004 transient errors instead of hard-failing the run. * **PAP: proxy and Cloudflare clearance** — restored CapSolver `cf_clearance` escalation for region pagination and fixed a `proxy_error` that could stall region-based crawls. * **Facebook: pipeline hardening** — hardened the shared Facebook crawler pipeline against session kills and account contention, reducing mid-run failures across all Facebook scrapers. # July 28, 2026 Source: https://docs.lobstr.io/changelog/2026-07-28 API updates shipped July 28, 2026 ### Improved * **Google Maps Reviews: faster scraping** — reduced retry and warmup overhead, cutting per-run latency significantly for review collection jobs. ### Fixed * **Google Maps: business name filter** — the name-match filter now uses a contains check instead of a starts-with check, so businesses whose names don't begin with the search term are no longer incorrectly excluded. * **Google News: proxy routing and rate limiting** — requests now route through the proxy pool with proper rate-limit retry handling, fixing reliability issues on high-volume news scraping runs. * **Trustpilot Reviews: persistent 403** — resolved a recurring 403 rejection caused by a stale AWS WAF token; the token is now refreshed on each run. * **SeLoger: sort order parameter** — fixed a crash caused by an unsanitized `paging.order` value being passed directly to the search API. * **Idealista: 406 client error** — fixed a request header mismatch that caused 406 Not Acceptable errors on Idealista listing scraping runs. # August 4, 2026 Source: https://docs.lobstr.io/changelog/2026-08-04 API updates shipped August 4, 2026 ### Improved * **Auto Billing Reset** — new `GET/POST /v1/plans/auto-reset` endpoint lets you configure automatic billing cycle resets when credit usage crosses a threshold (`threshold_pct`). A `max_resets_per_24h` cap limits spend within any rolling 24-hour window. If you enable the feature while already over threshold, a reset fires immediately. Failed payments (including 3D Secure cards) are suppressed for the rest of the billing cycle and trigger a failure email. See [Auto Billing Reset](/docs/auto-billing-reset). * **Google News: topic scraping and date filtering** — three new parameters: `topic_url` lets you scrape a predefined Google News topic (`WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`) or any topic/section URL from news.google.com without managing keyword tasks; `fetch_since` and `fetch_since_timezone` add date-based filtering on top of the existing `time_range` filter. The task `keyword` field also now accepts predefined topic names in CAPS directly. ### Fixed * **Instagram Post Comments: dead session handling** — a dead browser session no longer causes tasks to be misreported as `invalid_url`; the run now pauses for session recovery instead. * **Instagram Profile: famous public profiles skipped** — resolved an issue where high-follower public profiles were being incorrectly skipped during scraping. * **Sales Navigator Companies: deleted list handling** — the scraper no longer crashes the entire run when a custom list has been deleted; it logs the error and continues with remaining tasks. * **SeLoger: new listing route** — added support for a new `/annonce/` URL format that was returning errors on recent listing pages. * **TripAdvisor Restaurants: IP block** — resolved an IP-block error affecting TripAdvisor restaurant scraping runs. * **Google Maps Reviews: proxy rotation on rate limits** — the scraper now rotates proxy on place-fetch rate limits and retries on 500 server errors, reducing failed runs on high-volume review jobs. # August 11, 2026 Source: https://docs.lobstr.io/changelog/2026-08-11 API updates shipped August 11, 2026 ### Improved * **PAP: `fetch_since` filter and 14 new result fields** — added `fetch_since` and `fetch_since_timezone` parameters to filter listings by publication date. New result fields: `price_per_sqm`, `produit`, `typebien`, `typebien_label`, `energy_description`, `ges_description`, `transports`, `visite_virtuelle`, `exclusive`, `has_email`, `prix_valide`, `affiche_demarchage_refuse`, `appel_video`, and `video`. * **Retry a single run task** — new `POST /v1/runtasks/{runtask_hash}/retry` endpoint lets you retry one failed or skipped task from a completed run without restarting the entire run. See [Retry Run Task](/docs/retry-run-task). ### Fixed * **Trustpilot Reviews: "All languages" filter** — the "All languages" setting was incorrectly returning English-only reviews. It now returns reviews in all available languages. * **Google Maps: `ratings` field** — review count is now only populated when `collect_business_details` is enabled, matching the backend behavior (the field was unreliable for certain query shapes without a detail-page fetch). * **Google News: session reset on connection errors** — the scraper now resets its session on `connectionError` instead of stalling, preventing stuck runs on network interruptions. * **Google Maps Reviews: proxy rotation on CurlError** — added proxy rotation when a `CurlError` occurs during the batchexecute listing page fetch. * **SeLoger: assertion error on invalid URLs** — invalid listing URLs no longer raise an unhandled `AssertionError`; they are now caught and skipped. * **Facebook Business Page: connection failure mislabeling** — connection failures are no longer mislabeled as `invalid_url`; page names are now correctly extracted from `profile.php` fallback responses. * **Leboncoin: shared-account quota isolation** — the shared-account message quota for Leboncoin no longer gates unrelated scraper modules running on the same account. * **Vinted: non-JSON 200 crash** — listing pages that return a 200 with non-JSON content no longer crash the run. * **Duplicate success email** — fixed a case where a run completion email was sent twice when a task retry triggered `close_run` to re-fire. # August 18, 2026 Source: https://docs.lobstr.io/changelog/2026-08-18 API updates shipped August 18, 2026 ### Improved * **Twitter Search: 19 new filter parameters** — added `sort` (Top/Latest/From URL), `tweet_language`, `only_verified_users`, `only_twitter_blue`, `only_image`, `only_video`, `only_quote`, `author`, `in_reply_to`, `mentioning`, `geotagged_near`, `within_radius`, `geocode`, `place_object_id`, `minimum_retweets`, `minimum_favorites`, `minimum_replies`, `start_date`, and `end_date`. * **YouTube Channel Scraper: content-type toggles** — five new boolean parameters control what is collected per channel: `get_videos`, `get_shorts`, `get_streams`, `get_playlists`, and `get_comments` (comments for up to 5 videos/Shorts when combined with `get_videos`/`get_shorts`). Corresponding result fields added: `videos`, `shorts`, `streams`, `playlists`, `comments`. * **Facebook Pages Search: `max_results` and `max_unique_results_per_run`** — new parameters to cap how many pages are collected per task and across the run. * **API key rotation** — new `POST /v1/me/rotate_token` endpoint atomically replaces your API token with a freshly generated one (10 requests/hour limit). See [Rotate API Key](/docs/rotate-api-key). * **Resurrect aborted run** — new `POST /v1/runs/{run_hash}/resurrect` endpoint reopens an aborted run and resets interrupted tasks to `pending`, picking up from where the abort stopped without re-running already-completed tasks. See [Resurrect Run](/docs/resurrect-run). * **Community Story Rewards** — earn bonus credits (20% of your plan allowance, once per quarter) by posting about your lobstr.io use case on an eligible subreddit. Submit via `POST /v1/community_rewards/submissions`, check eligible subreddits via `GET /v1/community_rewards/subreddits`, and check submission status via `GET /v1/community_rewards/submissions`. Reward credits appear as `community_reward_credit` in the [Get Balance](/docs/get-balance) response. See [Community Story Rewards](/docs/community-rewards). ### Fixed * **Twitter User Tweets: full timeline and retweet fields** — the scraper now collects the complete timeline (not just the first page) and fixed retweet field extraction. * **Instagram Profile: rate-limit retry speed** — retry intervals on rate limits are now shorter, reducing wait time on large profile scraping runs. * **Instagram Reels: key error** — fixed a `KeyError` that caused certain reel records to fail silently. * **Sales Navigator Leads: proxy rotation on connection retries** — connection-layer retries now rotate the proxy, reducing stalls on persistent connection failures. * **Google Maps Reviews: premature empty page** — the scraper now retries when `batchexecute` returns an empty page prematurely instead of truncating the review list. * **SeLoger: `wl-cdp` short-link routing** — new short-link URL format (`wl-cdp`) is now correctly routed to the listing detail page. * **Google Search: sponsored results** — paid (`is_paid`) results are now correctly extracted via the serp-api backend. * **Google News: session reset on connection errors** — session is reset on `connectionError` in both keyword and topic result fetches. # August 25, 2026 Source: https://docs.lobstr.io/changelog/2026-08-25 API updates shipped August 25, 2026 ### New * **YouTube Comments Scraper** — now public. Scrape all top-level comments (and replies) from any YouTube video. Sort by top or newest, filter by date with `fetch_since`, cap reply depth with `max_replies`, and skip the pinned comment if needed. 0.5 credits per comment row. See [YouTube Comments Scraper](/examples/youtube-comments-scraper/add-tasks). ### Improved * **Immoweb Listings & Phones Search Export: 33 new result fields** — the enriched schema now includes sub-unit breakdowns for new-build projects (`units`, `project_name`, `project_sold_percentage`), detailed energy and legal data (`carbon_emission`, `primary_energy_consumption`, `has_heat_pump`, `has_photovoltaic_panels`, `has_double_glazing`, `has_asbestos_certificate`, `has_electrical_compliance`, `has_valid_flood_certificate`, `oil_tank_certificate_status`), room and parking breakdown (`room_count`, `toilet_count`, `shower_room_count`, `parking_count_indoor`, `parking_count_outdoor`), amenity flags (`has_swimming_pool`, `has_air_conditioning`, `has_disabled_access`, `has_internet`, `has_alarm`, `amenities`), pricing extras (`price_per_sqm`, `old_price`, `monthly_costs`), and listing stats (`view_count`, `bookmark_count`, `agency_website`). * **Yelp Search Export: `min_star_rating` and `min_reviews` filters** — two new paid-filter parameters let you restrict results to businesses with a minimum star rating (e.g. `4.0`) or a minimum review count. ### Fixed * **Reddit Scraper: comments-fetch 403 recovery** — retry backoff is now applied to `ClientError` responses so transient 403s on comment fetches clear within the same run instead of stalling. * **Sales Navigator (all scrapers): proxy country preservation** — the account proxy country is now correctly kept when rotating to a new proxy on connection retries, preventing country-mismatch blocks. * **Facebook Pages Search Export: account safety** — stopped burning the connected account on detail fetches; also fixed an anonymous-cookie leak when merging sessions back. # September 1, 2026 Source: https://docs.lobstr.io/changelog/2026-09-01 API updates shipped September 1, 2026 ### Improved * **Community Story Rewards: `estimated_reward_credits` in subreddit list** — `GET /v1/community_rewards/subreddits` now also returns `estimated_reward_credits`: the exact number of credits you would earn if your submission is approved, computed server-side with the same formula as the actual grant (20% of your plan's execution credits). No more guessing from "20% of your plan." See [Community Story Rewards](/docs/community-rewards). ### Fixed * **Sales Navigator Leads: email enrichment** — fixed a bug where the email enrichment step was not correctly resolving contact emails for certain lead profiles. * **Idealista: proxy rotation on 500 errors** — the scraper now rotates its proxy when the server returns a 500, reducing stalls on congested exit nodes. * **LaCentrale: anti-bot bypass updated** — switched to the ddbypass2 route targeting Chrome 152, resolving a recent uptick in DataDome challenges. # September 8, 2026 Source: https://docs.lobstr.io/changelog/2026-09-08 Idealista property details add-on, Community Rewards now includes LinkedIn, and several bug fixes ## Improved **SDK — `runs.call()` and timeout support** `runs.call()` is a new synchronous shortcut that starts a run and waits for it to finish, returning the completed run object. `runs.wait()` and `runs.call()` now both accept a `timeout` parameter (seconds); a `RunTimeout` exception is raised if the run doesn't finish in time. The `LOBSTR_API_BASE` environment variable lets you target a staging or self-hosted API without modifying your code. **CLI — `run start --timeout`, `run watch`, and `LOBSTR_API_BASE`** `lobstr run start` now accepts `--timeout` (abort after N seconds) and `--poll` (polling interval). `lobstr run watch` streams live run events to the terminal. `LOBSTR_API_BASE` is supported as an environment variable alongside `LOBSTR_TOKEN`. **MCP — expanded from 7 to 15 tools** The lobstr.io MCP server now exposes 15 tools grouped into four categories: Discover & inspect, Run & monitor, Results, and Account. New tools: `list_runs`, `abort_run`, `empty_scraper`, `get_results_url`, `check_credits`, `whoami`, `list_accounts`, `get_account`. The `account:read` scope now covers connected platform accounts. **Idealista Listings Search Export — property details add-on** Enable `get_property_details: true` in your squid settings to collect the full property characteristics page for each listing: year built, orientation, heating type, energy certificate, community costs, constructed and usable area, furnished status, duplex/top-floor flags, and more (22 extra fields). Three new fields are now always populated regardless of this setting: `has_parking_space`, `parking_space_included_in_price`, and `parking_space_price`. **Community Story Rewards — LinkedIn posts now eligible** You can now submit a LinkedIn post to earn your quarterly bonus credits in addition to Reddit. Pass `platform: "linkedin"` and your post URL when submitting. LinkedIn comment permalinks are rejected — only standalone posts qualify. The reward amount is the same as for Reddit. ## Fixed * **Reddit Scraper** — `body` and `media_url` fields are now correctly populated on subreddit-listing posts (were empty on that post type despite being set for others). * **Reddit Scraper** — tasks no longer crash when a comment thread is partially blocked; blocked comments are skipped and the rest of the thread is returned. * **Instagram Reels Scraper** — profiles were being skipped during iteration; the scraper now correctly processes all profiles. * **Instagram Followers Scraper** — fixed 401 authentication errors that were intermittently causing task failures. * **Instagram Profile Scraper** — fixed 401 Sentry errors. * **Google Maps Reviews Scraper** — proxy is now rotated on CurlError for place pages, reducing failed tasks caused by proxy blocks. # September 15, 2026 Source: https://docs.lobstr.io/changelog/2026-09-15 15 new public scrapers, LinkedIn Leads company enrichment, Sales Navigator company details, and bug fixes ## New Scrapers **YouTube Transcript Scraper** Download captions and full transcripts from any YouTube video, playlist, or channel. Supports all caption languages, auto-generated tracks, and timestamped segments. Each row includes the full transcript as plain text plus every downloaded track in structured form. **LinkedIn Company Scraper** Scrape LinkedIn company pages without a LinkedIn account. Collects name, description, website, industry, employee count, follower count, headquarters, specialties, locations, affiliated pages, and products. **Quora Scraper** Collect answers, posts, profiles, and topics from Quora. The scraper handles multiple URL types (questions, profiles, spaces, topics) and returns a unified record per row with a `record_type` field to distinguish them. **Yellow Pages Companies Search Export** Export business listings from Yellow Pages search results. Supports keyword + location search or a direct search URL. Enable `results_details` to also collect latitude/longitude, email, full description, and social links from each business page. **Instagram Search & Hashtags Scraper** Collect posts and reels from Instagram hashtag pages and keyword searches. Filter by recent or top posts, set a date window with `fetch_since`, and optionally enrich each item with up to 10 latest comments. **Upwork Jobs Scraper** Export job listings from Upwork search results. Filter by category, experience level, job type, budget, client location, and posting date. Enable `job_details` to collect client history, spend, rating, and proposal counts from each posting page. **Facebook Comments Scraper** Scrape all comments (and optionally replies) from any Facebook post, photo, video, or reel. Includes full reaction breakdown, author info, and comment language detection. **Contact Details Scraper** Crawl any website to extract contact information: email addresses, phone numbers, and social profiles across 15+ platforms (LinkedIn, Twitter, Instagram, Facebook, YouTube, TikTok, Telegram, WhatsApp, and more). Automatically follows contact, about, and imprint pages. **Facebook Ad Library Scraper** Export ads from the Meta Ad Library by keyword search or advertiser page. Filter by country, ad status, media type, date range, and platform. Enable `ad_details` to collect EU targeting data, payer/beneficiary info, and lifetime spend. **TikTok Profile Scraper** Export all videos from any TikTok profile with full engagement metrics, video metadata, music info, and complete author profile data. Use `profile_only: true` to collect just the profile stats without videos. **Glassdoor Jobs Scraper** Export job listings from Glassdoor with salary estimates (employer-provided or Glassdoor estimate), company ratings across six dimensions, and full job descriptions. Collect up to 900 jobs per search URL. **Naukri Jobs Scraper** Export job listings from Naukri, India's largest job portal. Includes salary data, experience requirements, key skills, AmbitionBox ratings, and walk-in interview details. Enable `job_details` for full descriptions, applicant counts, and company profiles. **Zillow Property Listings Scraper** Export property listings from Zillow search results with price, address, bedrooms, bathrooms, lot size, Zestimate, and listing status. Enable `property_details` to collect full description, agent contacts, MLS info, year built, HOA fees, and price history. **LinkedIn Company Employees Scraper** Export employees from any LinkedIn company page. Filter by keyword (job title, skill, department) and collect profile URL, headline, location, and connection degree. Requires a synced LinkedIn account. **Threads Scraper** Scrape posts, profiles, and keyword/hashtag searches from Threads. Collects full engagement metrics, media, music, quote/repost chains, and profile data. Use `include_replies: true` on single post URLs to also return reply threads. ## Improved **LinkedIn Leads Scraper — company enrichment and new profile fields** Enable `enrich_company: true` to collect 17 company-level fields for each lead's current employer: website, domain, industry, employee headcount, followers, headquarters (city, country, full), description, tagline, specialties, logo, and verified status. Ten new profile fields are now collected when `scrape_profile_details` is enabled: `certifications`, `languages`, `honors`, `projects`, `publications`, `patents`, `organizations`, `courses`, `is_verified`, and `hiring`. The new `skip_collected_leads` param (default: false) skips profiles already collected by this squid in a previous run, so each run returns only new leads. **Sales Navigator Companies Scraper — company details add-on** Enable `get_details: true` to collect nine additional fields per company: `company_domain`, `company_website`, `company_linkedin_url`, `employee_count` (exact), `founded_year`, `specialties`, `company_type`, `revenue_range`, and `headquarters_location`. **Idealista Listings Search Export — max\_pages default lowered** The default value of `max_pages` has been updated from 100 to 60 to better match Idealista's typical result depth. ## Fixed * **YouTube Comments Scraper** — fixed an edge case where comments with no replies were causing task failures. * **LinkedIn Leads Scraper** — resolved intermittent 429 errors when processing large search result sets. * **TikTok Video Scraper** — private account videos no longer cause the task to fail; they are skipped and collection continues. # September 16, 2026 Source: https://docs.lobstr.io/changelog/2026-09-16 MCP, CLI, and SDK can all now attach a connected platform account to a squid ## Improved **MCP — attach a connected account to a squid** The lobstr.io MCP server can now attach a synced platform account (LinkedIn, Sales Navigator, …) to a squid: a new `attach_account` tool, and an optional account on `run_scraper`. Before this, a squid created through the MCP had no account attached and nothing could add one, so any account-backed scraper (Sales Navigator Leads Scraper, LinkedIn Leads Scraper, …) failed immediately with no accounts available to launch the run. Attaching only ever adds — an account already on the squid stays attached. With no account specified, `attach_account` picks one automatically, but only when exactly one connected account matches the scraper's required account type, is healthy, and isn't rate limited; otherwise it lists the available accounts to choose from. Automatic selection never runs on a squid that already has an account. A rate-limited account is reported as temporarily locked rather than missing, since those locks clear on their own. An account of the wrong type is refused, with a message naming both types. An account with an expired session can still be attached deliberately, with a warning, in case you're about to re-sync it. The MCP server now exposes 20 tools. **CLI — `--account` on `squid update` and `go`** `lobstr squid update` and `lobstr go` now take `--account` (repeatable), taking either an account's username or a hash — a hash prefix is enough. Linking is additive: the account is added to whatever the squid already has. `squid update --replace-accounts` sets the account list outright instead, and prints which accounts it's about to detach before doing it; with no `--account` at all, it detaches everything. For an account-backed crawler, `go` picks the account for you when exactly one healthy, unlocked account matches the crawler's account type. When it can't, it names the matching candidates, or the account type to connect, so you can pass `--account` yourself. It never picks for a squid that already has an account, so a reused squid keeps what it had. A wrong-type account, an unknown account, or `--account` on a crawler that doesn't use one each fail with a clear message before anything is created; if linking fails after the squid is created, or the command is interrupted before the run starts, the squid is removed instead of left behind. `crawlers ls`, `show`, and `search` now show which account type a crawler needs (for example `sales-nav-sync`) in place of a plain yes or no, so you can see what to pass `--account`. `--json` output is unchanged. **SDK — `squids.attach_accounts()`** `client.squids.attach_accounts(squid_id, accounts, replace=False)`, available on both the sync and async client, links one or more connected accounts to a squid without dropping the ones already there — it reads the squid's current accounts and sends the union. Pass `replace=True` to set the list outright, including `[]` to detach everything. `squids.update(..., accounts=[...])` is also available as a direct mirror of the API field; unlike `attach_accounts()`, it's full-replace, so sending it without first reading the squid's current accounts can detach ones you meant to keep. New fields: a squid's linked accounts (`Squid.accounts`), an account's status and lock state (`Account.status`, `Account.resets_in`, `Account.lock_time`), and the account type slug a crawler needs (`Crawler.account_type`, for example `linkedin-sync`) — the existing `Crawler.account` boolean is unchanged. The read and the write inside `attach_accounts()` are two separate requests, not atomic, so a concurrent attach on the same squid between them can still drop one addition. # September 22, 2026 Source: https://docs.lobstr.io/changelog/2026-09-22 Five scrapers newly documented, Jobs category in the store, created-via badges on squids, and scraper reliability fixes ## Now Documented Five scrapers that are live in the store had no API documentation. They now have full reference pages — task inputs, squid settings, result fields, and credit cost. * **[LinkedIn Jobs Scraper](/examples/linkedin-jobs-scraper/add-tasks)** — export job postings from a LinkedIn jobs search URL with full description, structured salary, recruiter and company details. No LinkedIn account required. * **[TikTok Hashtag Scraper](/examples/tiktok-hashtag-scraper/add-tasks)** — export every video published under a hashtag, with author details, engagement metrics and music info. * **[YouTube Search Scraper](/examples/youtube-search-scraper/add-tasks)** — search YouTube, or export a video, channel, playlist or hashtag, with optional comments and subtitles. * **[Instagram Comments Scraper](/examples/instagram-comments-scraper/add-tasks)** — collect comments from any public post or reel without an account. Replaces the older Instagram Post Comments Scraper. * **[Instagram Followers Scraper](/examples/instagram-followers-scraper/add-tasks)** — export every follower of a public account. Requires a synced Instagram account. ## Improved **Squids — see where each squid was created from** Squids created outside the dashboard now carry a badge next to their name showing the surface they came from: `cli`, `sdk`, `api`, or `mcp`. The badge appears both in the squids list and on the squid page, so an account driven by several integrations at once stays readable at a glance. **Store — new Jobs category** The store Target filter has a new **Jobs** category, grouping the Naukri Jobs, Glassdoor Jobs and Upwork Jobs scrapers. They previously carried no category and were only reachable by scrolling the full scraper grid. ## Fixed * **YouTube Channel Scraper** — channel pages no longer fail with an assertion error. YouTube moved its initial payload from an inline `ytInitialData` variable to a separate `yt-initial-data` script tag; both formats are now parsed. * **TikTok Hashtag Scraper** — hashtag pages no longer return partial results or fail outright under load. Pagination retries a scroll up to three times before accepting a page, response bodies are read as soon as they arrive instead of being evicted from the browser buffer, and a page that loads without the hashtag feed is reloaded once before the task gives up (previously reported as a misleading "hashtag may not exist" error). * **Glassdoor Jobs Scraper** — fixed a SQL error on the `apply_url` field that was failing tasks mid-run. * **Contact Details Scraper** — removed the stray lowercase `website` entry from the store Domain filter, which is now brand-only. # September 29, 2026 Source: https://docs.lobstr.io/changelog/2026-09-29 Six scrapers newly documented, AutoScout24 gets 24 new fields, Yelp not-recommended reviews, Reddit filters that actually filter, and a week of reliability fixes ## Now Documented Six scrapers that went public in the store last week had no API documentation. They now have full reference pages — task inputs, squid settings, result fields, and credit cost. * **[Pinterest Scraper](/examples/pinterest-scraper/add-tasks)** — export pins from a Pinterest keyword, search URL, board, profile or single pin, no account needed. 40+ fields per pin including engagement counts, board and pinner details, plus an optional Full Pin Details add-on. * **[Google Play Store Scraper](/examples/google-play-scraper/add-tasks)** — export any Play Store app listing and its reviews from an app URL, package id or search keyword. App metadata (developer, category, installs, rating breakdown, screenshots, changelog) plus reviews with the developer reply, no Google account needed. * **[LinkedIn Search Scraper](/examples/linkedin-search-scraper/add-tasks)** — export people, company and post search results from a LinkedIn search URL, using your own synced LinkedIn account. Optional Profile Details, Company Details and Post Engagement add-ons open each result for the full record. * **[Similarweb Scraper](/examples/similarweb-scraper/add-tasks)** — export the full Similarweb profile of any domain or ranking: traffic, ranks with 3-month history, keywords, audience, referrals, technologies, competitors and company firmographics. Optional add-ons bring exact monthly visit counts, AI-assistant referral traffic and the full metrics of the 10 closest competitors. * **[Crunchbase Companies Scraper](/examples/crunchbase-companies-scraper/add-tasks)** — export company profiles from a Crunchbase company URL or search: description, industries, headquarters, employee range, founders, investors, funding rounds, acquisitions, growth and heat scores, plus the technology and intent data Crunchbase publishes. No account, no cookies. * **[Leboncoin Messages Reader](/examples/leboncoin-messages-reader/add-tasks)** — read the messages in your Leboncoin inbox (whole inbox or one conversation), one row per message, with the conversation, listing and other party on every row. Pairs with the Leboncoin Auto Message Sender to close the send → reply loop on the same `annonce_id`. ## New **AutoScout24 Listings Scraper — 24 new fields** The AutoScout24 Listings Scraper now exposes AutoScout24's own price intelligence (rating band 0–6, label, VAT-deductible flag, full price bands), the dealer's identity and reputation (id, profile URL, "customer since" year, rating, review count, recommend share), the vehicle's exact GPS coordinates, CO2 emissions read from AutoScout24's structured field (with a flag that surfaces estimates and self-contradicting zeros), the publication timestamp, equipment split into AutoScout24's own four categories (Safety, Comfort, Media, Extras), a second seller phone number and its line type, and three tri-state condition flags (accident-damaged, full service history, non-smoking) plus cabin-cleanliness. See the [AutoScout24 result fields](/examples/autoscout24-listings-scraper/get-results) for the full list. **Yelp Reviews Scraper — collect the "not currently recommended" reviews** A new `collect_not_recommended_reviews` toggle collects the reviews Yelp hides under "reviews that are not currently recommended" at the bottom of the biz page. Every row now also carries `is_recommended` — `false` on those hidden reviews, `true` on regular ones. Yelp shows fewer details on hidden rows (no votes, photos, language or member-since), and `sort` does not apply to them. See [update-settings](/examples/yelp-reviews-scraper/update-settings) and [get-results](/examples/yelp-reviews-scraper/get-results). **Run estimates now line-item email verification and paid filters** `estimate_run` (the "Ready to launch?" recap and the API's `/squid/{hash}/estimate`) used to omit the email-verification cost and the paid result filters on the Google Maps Leads Scraper, so the displayed cost read lower than what was actually billed. The estimate now line-items email verification on every row and the paid filters ("exclude listings without email", "collect business details") separately, so the announced total matches what the run ends up costing. **MCP — open source, and `search_scrapers` finds partial matches** * The lobstr.io MCP server is now a public GitHub repository — [lobstrio/lobstr-mcp](https://github.com/lobstrio/lobstr-mcp), Apache-2.0, the same licence as the SDK and CLI. Production and the Test Server deploy from it. * `search_scrapers` used to require every word of the query to appear in a scraper's name, description or slug, so "reddit search posts comments" returned zero and agents wrongly concluded no Reddit scraper existed. `results` still returns exact matches only; a new `similar` key returns up to 5 near-miss scrapers with the `matched` / `missing` words for each, ranked by relevance. * `run_scraper` no longer refuses admin runs the public API would accept — the client-side credit-affordability check has been dropped; the API stays the authority. Explanatory prose has also been trimmed on refusals, since the structured fields already carry the same information. **Crawler attributes now describe JSON sub-fields** `GET /v1/crawlers/{hash}/attributes` used to return a single opaque line per JSON column (e.g. `top_comments`, `videos`, `equipment_safety`). It now expands the described sub-fields where the crawler publishes them, so agents and SDKs can see the shape of each JSON column without a live run. Applies to the YouTube Channel Scraper's collector columns and to every new scraper whose lobstr.json declares sub-fields. ## Improved **Reddit Scraper — filters that filter** * `post_type` used to advertise `link`, `self`, `image`, `video` — values Reddit's search does not actually accept. The scraper silently returned every post, whatever the filter said. The allowed set is now `any`, `image`, `video`, wired to Reddit's real media tabs, and the docs match. See [update-settings](/examples/reddit-scraper/update-settings). * Comment search (`search_comments: true`, or any task URL carrying `type=comments`) used to return 0 rows because Reddit stopped emitting the `data-testid="search-sdui-comment"` selector the scraper looked for. The selector has been updated and comment searches return rows again. * Comment rows now report the comment's own URL and score, not the parent post's. * Search continuation pages that answer 429 no longer crash the run — the run pauses and resumes on a fresh proxy instead. **Instagram Search & Hashtags Scraper — real web keyword search** The hashtag scraper now hits the same GraphQL keyword search Instagram's own web UI calls (Chrome 153 headers and fingerprint), which Instagram serves cleanly. The web grid does not carry 16 of the fields the older mobile-API path did (`product_type`, `reshare_count`, `coauthors`, `tagged_users`, `music`, `location_id`, `location_name`, `location_lat`, `location_lng`, and 7 others) — they have been removed from the result schema. The duplicate-stop rule was also tightened: pagination now requires 10 consecutive pages with posts but no new results before stopping, up from a single page. Older-than filter and the Newer/Older date pickers were also brought into line in the squid form. **YouTube Search Scraper — reliability** * Tasks created since 2026-09-22 returned 0 rows on every input after the task-input rename. The renamed input is now read correctly, old `url` tasks keep working, and an empty input is refused up front with a `wrong_input` error instead of a silent 0-row success. * A broken connection while saving a page (`IncompleteRead`, `ChunkedEncodingError`) no longer ends the run in ERROR. Network errors, 429s and 5xx switch to a fresh proxy, YouTube is checked before pausing, both YouTube page layouts are parsed, and dates are returned in UTC. **Yellow Pages US Scraper — Safari fingerprint** Yellow Pages runs used to pause for hours on Cloudflare "Attention Required!" 403 walls, retrying the same profile every 30 minutes with zero results. The scraper now presents a Safari TLS fingerprint (Chrome and Firefox got hard-blocked and are now on the blocklist), with a retry budget sized on the measured pass rate, an overall deadline per page, and a circuit breaker on the detail step. **Google Maps Leads Scraper — email extraction and verification** * Extracted emails no longer keep a stray `20` from a URL-encoded space — the address comes out clean (`hello@…` instead of `20hello@…`), so verification and contact use the real address. * Non-business addresses picked up from a website's source code (font licences, site-builder credit lines, template author emails) are now filtered out of the results. A 100-listing Austin plumbers benchmark dropped its noise rate from 17% to zero without missing any real business email. * Email verification verdicts stay with their own address instead of crossing between two addresses of the same listing. * Finished runs are frozen: each run keeps a snapshot of its email fields at completion time, so a later run touching the same business can never rewrite the verdicts of a run already marked done. * Verification credits are no longer billed on reused verdicts (a re-run that reuses every verdict from a previous run now costs 0 verification credits, down from 1 per address). * The `description` field is filled again — Google Maps moved it to a new place-data slot; the scraper reads it there, and back-fills it on repeat rows that skip the details step. Fixes the empty-description bug reported on the "Collect Business Details" option. * Run estimates were calibrated from production so the announced time and credit figures match real runs. **Squid forms — labels, tooltips, and where each setting lives** Nine scrapers had their squid form audited. Notable changes: * **Crunchbase Companies Scraper** — Industry and Location now accept plain names (resolved via Crunchbase's own autocomplete); the search filters were moved to Basic settings. * **Pinterest Scraper** — Max Results moved out of Advanced settings; keyword-first URL tooltip. * **Threads Scraper** — a single word is now searched as a keyword (profiles are reached via the profile link or `@handle`); Max Results moved to Basic. * **Yellow Pages US Scraper** — Search URL, Keyword and Location tooltips now name each other; filters and "Collect Additional Details" moved to Basic. * **Instagram Search & Hashtags Scraper** — Older than uses the same date picker as Newer than and sits next to it; Max Results Per Input rewording. * **Google Play Store Scraper** — form labels, tooltips and the country/reviews claim rewritten. ## Fixed * **SeLoger Search Export** — a 502 on `classifiedList` pagination no longer hammers the same dead proxy in a retry loop. * **AutoScout24 Listings Scraper** — the `fetch_since` date filter actually limits results now; a transient dealer-profile failure no longer poisons that dealer for the whole run; a detail page without a price rating no longer blanks the one carried by the search card; search pages are paced \~3s apart instead of \~13s; runs no longer crash when the total page count is unknown (missing `has_next_page`). * **TikTok Hashtag Scraper** — a transient "no items returned" from the bridge task now retries instead of failing the whole task. * **YouTube Channel Scraper** — the API attributes endpoint now describes the sub-fields of the `videos`, `shorts`, `streams`, `playlists` and `comments` JSON columns. # October 6, 2026 Source: https://docs.lobstr.io/changelog/2026-10-06 Two new scrapers documented, Google Search Shopping add-on, Trustpilot and YouTube Channel gain new fields, LinkedIn Jobs Full Job Details becomes a paid add-on, MCP now ships 22 tools with Grok and Codex ## Now Documented Two scrapers that went public in the store had no API documentation. They now have full reference pages — task inputs, squid settings, result fields, and credit cost. * **[TripAdvisor Restaurant Details Scraper](/examples/tripadvisor-details-scraper/add-tasks)** — paste a list of TripAdvisor restaurant URLs and get one row per place with city ranking, Travelers' Choice and MICHELIN awards, four sub-ratings, the full 1-to-5-star rating distribution, cuisines, price range, address, phone, email, website and GPS coordinates. No account needed. * **[Capterra Reviews Scraper](/examples/capterra-reviews-scraper/add-tasks)** — paste a Capterra product URL and export every review of that product: the full pros, cons and overall comments, the reasons for switching and for choosing it, the products the reviewer considered or switched from, all five ratings plus likelihood to recommend, the incentive disclosure, the vendor's public reply and the reviewer's profile (job title, industry, company size, time using the product, LinkedIn verification). Capterra's regional sites (`.co.uk`, `.fr`, `.de`, `.com.br`, …) are supported too. No account, no login. ## New **Google Search Scraper — Shopping add-on** A new `collect_shopping_results` setting also collects the Google Shopping results for each keyword (first page, up to 40 products), using the same country, language and location as the organic search. Nine new fields are added to the result schema when the add-on is on: `is_shopping`, `seller`, `price`, `price_amount`, `currency`, `rating`, `rating_count`, `image_url`, `product_id`. Billed at 1 credit per shopping result (on top of the usual 1 credit per organic result). See [update-settings](/examples/google-search-scraper/update-settings) and [get-results](/examples/google-search-scraper/get-results). **Trustpilot Reviews Scraper — sentiment, topics, review lifecycle, company profile and stats** The scraper now returns Trustpilot's own sentiment analysis and topic tagging on every review (`review_sentiment`, `review_sentiment_spans`, `review_topics`), the review lifecycle flags (`is_latest_by_consumer`, `is_latest_by_consumer_on_location`, `review_status`, `is_pending`, `is_filtered`, `owner_reply_updated_date`), and the full company profile and stats once per company (`company_name`, `company_category`, `company_page_url`, `company_website`, `company_domain`, `company_country`, `company_claimed`, `company_actively_inviting`, `company_paid_plan`, `company_category_rank`, `company_phone`, `company_email`, `company_address`, `company_description`, `company_logo`, `company_verification`, `company_location_count`, `company_business_closed`, `company_rating_breakdown`, `company_language_breakdown`, `company_reply_percentage`, `company_average_days_to_reply`, `company_negative_reviews_count`, `company_negative_reviews_replied`, `company_last_reply_to_negative`). Timestamps (`date_published`, `experience_date`, `owner_reply_date`, `updated_date`) now come back as true UTC instead of Paris-local time wrongly labelled `Z`. New squid settings: `topics` (filter by topic), `search_mode` ("Any of the words" / "Exact phrase"), `review_mode` ("Latest review per consumer" / "Full history"), `include_regional_domains`, `reviewer_country`, `sample_size`, `start_page`. The `url` task input now also accepts a bare domain or brand name. See [update-settings](/examples/trustpilot-reviews-scraper/update-settings) and [get-results](/examples/trustpilot-reviews-scraper/get-results). **LinkedIn Jobs Scraper — Full Job Details becomes a paid add-on** Opening each job's full page to collect the structured description, salary, seniority, industries, recruiter and apply link is now a billed add-on (`job_details`) at 1 credit per job, and off by default. The lightweight listing fields (title, company, location, posted date, apply link, snippet) stay included at the base 1 credit per job. If the task input is a single job URL, Full Job Details is free (the posting page is already fetched in full). See [update-settings](/examples/linkedin-jobs-scraper/update-settings) and [credit-cost](/examples/linkedin-jobs-scraper/credit-cost). **YouTube Channel Scraper — four new fields** New columns on every channel row: `subscribers_number` (exact integer, so you can finally sort and filter — the old `subscribers_count` text like "21.3M subscribers" is still there), `banner_url`, `is_verified`, and `email_source` (`"channel"` when the email came from the channel About tab, `"video_descriptions"` when it was found in a video description). The database migration repairs the previously malformed `url` values (`https://www.youtube.com/c/http%3A%2F%2Fwww.youtube.com%2F%40handle` → `https://www.youtube.com/@handle`) and the one-day-early `creation_date` values on all historic rows. See [get-results](/examples/youtube-channel-email-scraper/get-results). **MCP — 22 tools, Grok support, Codex setup** * The lobstr.io MCP server now exposes 22 tools, up from 20: `update_scraper` to change a squid's settings in place, and `wait_for_run` to block until a run finishes (success, error, or timeout) instead of polling. * Grok is now a supported client (Grok Bots on a SuperGrok plan, or via a Cursor/Codex bridge). See [the MCP page](/docs/mcp#5-connect-your-client) and the step-by-step [Grok guide](https://help.lobstr.io/integrations/grok). * Codex CLI setup is documented end-to-end: `codex mcp add` for the quick path, or a `~/.codex/config.toml` entry for the long-lived one. ## Improved **Google Search Scraper — keyword input only, filters that filter** * The task input is now a Google Search **keyword**, not a URL. The field is `keyword`; Google search links are rejected at submission time. Example: `{"keyword": "crab"}`. * `results_per_page` was removed from the squid settings — Google ignores `num>10`, so a request for 100 silently returned 10, over-charged pagination, and misled users. The scraper now always requests 10 per page and paginates as needed. * `RESULT POSITION` is now the organic rank counted across pages — page 2's first organic result is 11 (not 23), and People Also Ask / related-search rows no longer eat positions 11–22. * `PAGE` is now served from the row's own run, so a result deduplicated across runs no longer swaps page numbers between runs. See [add-tasks](/examples/google-search-scraper/add-tasks) and [update-settings](/examples/google-search-scraper/update-settings). **LinkedIn Search Scraper — Network Degree pick list, Location and Industry by name** * `network` is now a pick list with the values LinkedIn's own filter uses: `1st`, `2nd`, `3rd+` (comma-separated for several, e.g. `1st,2nd`). The previous `F`, `S`, `O` codes are no longer accepted. * `location` now accepts a place name (e.g. `France`, `Paris`, or `Paris Texas` to pick one city among namesakes). The LinkedIn numeric id still works, and so does a comma-separated list. * `industry` now accepts an industry name as LinkedIn lists it (e.g. `Software Development`, `Hospitals and Health Care`). The LinkedIn numeric id still works, and so does a comma-separated list. * The `company` tooltip now spells out the precedence rule: if both `company` and `current_company_url` are filled, Current Company URL wins. See [update-settings](/examples/linkedin-search-scraper/update-settings). **Crunchbase Companies Scraper — multi-select filters** `funding_stage` and `employee_count` now accept several values at once, comma-separated (e.g. `funding_stage: "seed,series_a"`, `employee_count: "11-50,51-100"`). The underlying API validation was fixed so comma-separated allowed-list inputs are stored as a clean comma string instead of being rejected as "not one of the allowed values". See [update-settings](/examples/crunchbase-companies-scraper/update-settings). **Zillow Property Listings Scraper — Settings merge correctly with the URL, cleaner filter labels** * Settings filters now merge correctly with the pasted URL's filters: Sold or For rent switches the opposite market off, Home Type forces the chosen type on (so Only-Houses no longer silently keeps apartments), and setting one price or bedroom bound keeps the URL's other bound instead of clearing it. * The `days_on_site` setting was renamed to `Listed or Sold Within` (API param name unchanged). Tooltips on every filter now state which of the URL and the Settings wins. See [update-settings](/examples/zillow-property-listings-scraper/update-settings). **Instagram Search & Hashtags Scraper — "both off" collects both** When both `get_posts` and `get_reels` are off, the scraper now collects both (the sensible default) instead of silently returning zero rows. If you really want only one, turn one on. See [update-settings](/examples/instagram-hashtags-scraper/update-settings). **Squid forms — labels, tooltips, and where each setting lives** Fifteen scrapers had their squid form audited this week. Changes are label- and tooltip-only — no API param names were renamed, so existing integrations keep working. * Scrapers reworked: LinkedIn Jobs, LinkedIn Search, LinkedIn Company, LinkedIn Company Employees, YouTube Search, YouTube Transcript, TikTok Profile, TikTok Hashtag, Contact Details, Zillow, Naukri Jobs, Facebook Comments, Facebook Ad Library, Similarweb, Glassdoor Jobs, Upwork Jobs, Leboncoin Messages Reader, Quora. * The Add tasks form and modal now show each task field's display label (e.g. "Website" on Contact Details, "Profile URL or handle" on TikTok Profile, "Video, channel, playlist or search" on YouTube Search) instead of the raw field name. * `Max Results Per Task` moved to Basic Settings on scrapers where it is the main cost cap. `Max Results Per Task` on Contact Details is now hidden (it never did anything there — one website, one row). * Similarweb: `Competitor Details` setting relabelled `Competitor Metrics`. * YouTube Search: `Get Subtitles` relabelled `Download transcript`, `Subtitle Language` relabelled `Transcript language`, `Has Subtitles/CC` relabelled `Only videos with captions`. * Quora: `Resolve Most Viewed Writers` relabelled `Flag Answers From Most-Viewed Writers`. **Trustpilot Reviews Scraper — brand matching and reviewer\_country reliability** Brand names containing `&` or `+` (e.g. `Procter & Gamble`) are kept intact across every page. The reviewer\_country enrichment is now bounded (no runaway scans), and a flaky request now retries on a softer path instead of failing the task. ## Fixed * **LinkedIn Connections Export** — the `/voyager/.../profileContactInfo` endpoint moved; the module now reads emails from LinkedIn's current profile request, and `410 Gone`, `400`, `429`, `403` on the `/feed/` login check and a repeated `401` or `999` all pause the run (with the account marked `cookies_expired` where appropriate) instead of ending it in ERROR. The connections search also uses LinkedIn's live `queryId` (looked up from the feed scripts, or falls back to the last known one), fixing the empty 400 responses. Email and profile lookups now count under the account's daily profiles limit. * **Sales Navigator Leads Scraper** — a LinkedIn `429 Too Many Requests` now pauses the run while the account cools down, instead of raising `AssertionError` and ending the run in ERROR. * **Sales Navigator Profile Scraper** — same `429` fix; saved-search tasks no longer swallow a run-level pause. * **YouTube Channel Scraper** — items on the Playlists tab that are podcasts or shows now link to their playlist page (`/playlist?list=...`), not to a `/watch?v=PL...` URL that doesn't open. Shorts, playlist links, creation date, non-English handles and emails obfuscated as `name [at] domain.com` are now handled; the collector pages past 30 items and no longer leaks the previous channel after a 404. * **TikTok Comments Scraper** — a proxy or network failure now rotates to a new proxy exit before each retry. After five failed exits in a row, the run pauses for an hour instead of crashing. * **TikTok Hashtag Scraper** — waits up to 200 s for page 1 (TikTok is slow on cold hashtags), rotates proxy on retry, and `NotFound` is only raised on TikTok's own "video currently not available" response. * **Idealista Listings Search Export** — new-build units no longer come back with an empty `condition`; the parser now reads Idealista's "New home development" phrase. * **Google Maps Leads Scraper** — `geo_match` is tightened to postal code, parses two-part UK postcodes, tolerates partial codes, and drops results without a ZIP when the task has one. The duplicate `auto_verify_emails` squid param (two entries with the same name in `lobstr.json`) was dropped. Finished runs are frozen so a later run never rewrites the email-verification verdicts of a completed one (placeholder/template emails are short-circuited before the verifier call; template local-parts are only dropped on freemail domains). * **SeLoger Search Export** — `short_description` now defaults to `None` when the listing has no description, fixing the `ItemNotFound` crash. * **Trustpilot Reviews Scraper** — the WAF token minter runs on both Node 18 and Node 20. * **Yelp Reviews Scraper** — `not_recommended` reviews now show up on biz pages whose URL alias differs from Yelp's canonical alias. # October 8, 2026 Source: https://docs.lobstr.io/changelog/2026-10-08 Reddit Scraper gains Sort Period; Facebook Marketplace Scraper gains Newer than, an option to exclude results outside your search, and a new is_outside_search field; a blocked or down website now pauses the run instead of ending it in error; Pinterest pins with an encoded id no longer stop the run ## New **Reddit Scraper — Sort Period** * `sort_period` sets the time window of a ranking: `all` (default), `year`, `month`, `week`, `day` or `hour`. It applies to subreddit feeds sorted by `top` or `controversial`, and to searches sorted by `relevance`, `top` or `comments`. A `t` already in the task URL (e.g. `https://www.reddit.com/r/Bitcoin/top/?t=year`) wins. * Squids already set to `top` or `controversial` now rank over all time. Reddit's own default for these feeds is the last 24 hours, which is what they returned until now: set `sort_period` to `day` to keep that. See [update-settings](/examples/reddit-scraper/update-settings). **Facebook Marketplace Scraper — Newer than and Exclude Results Outside Your Search** * `fetch_since` (Newer than) keeps only listings published after a point in time: a relative duration (`"24h"`, `"7d"`, `"2w"`) or a date (`YYYY-MM-DD`, read in `fetch_since_timezone` when set). On search URLs, Facebook's matching Date listed filter (last 24 hours, 7 days or 30 days) is added for you, and the older listings Facebook still returns are skipped one by one and not billed. Set it to your schedule interval to collect, and pay for, only the new listings of each run. * `exclude_outside_search` (off by default) skips the listings Facebook shows under "Results from outside your search" (outside your search area, or only loosely related to your query) and stops paging once that section starts. Skipped listings are not billed. * New result field `is_outside_search`: `true` for the listings under that section, `false` before it, empty on browse and category URLs. See [update-settings](/examples/facebook-marketplace-scraper/update-settings) and [get-results](/examples/facebook-marketplace-scraper/get-results). ## Improved **Reddit Scraper — feed limits spelled out** Reddit serves about 1,000 posts per feed at most (new, top, controversial, search), so on a busy subreddit `new` only reaches back a few weeks. The [update-settings](/examples/reddit-scraper/update-settings) page now explains how to go further back (several sorts and periods, plus keyword searches scoped to the subreddit), and that `fetch_since` ends the task at the first older post, so it belongs with `sort_subreddit` set to `new`. **Facebook Marketplace Scraper — Get Listing Details cost spelled out** Get Listing Details is billed once per squid: on later runs, the listings this squid already enriched are skipped and not billed again. This was already the behaviour; the [credit cost](/examples/facebook-marketplace-scraper/credit-cost) page now says so. **All scrapers — a blocked or down website pauses the run instead of ending it in error** When the website being scraped refused our requests (HTTP 403 or 429) or did not answer properly (HTTP 5xx) even after retries, the run used to end as `ERROR`. It now pauses for 10 minutes with `done_reason` `website_inaccessible` and resumes on its own, picking up only the unfinished tasks, up to 3 times per run; a fourth time it ends as `ERROR` as before. Runs you poll or receive by webhook will show `PAUSED` then `RUNNING` again instead of `ERROR`. See [errors](/docs/errors). ## Fixed **Pinterest Scraper — pins with an encoded id** Pinterest now gives some pins an encoded id such as `e1_AfqPShzqO1C7_LEkrAbtoIWUe2MoGdDTj5vU32Lr9gXn25qs1FpIvg` instead of a number. These pins made the run stop with an error; they are now collected like any other pin. `pin_id` stays a string: store it as text, not as a number. See [get-results](/examples/pinterest-scraper/get-results). # Changelog Source: https://docs.lobstr.io/changelog/index API updates, improvements, and fixes shipped by the lobstr.io team This changelog tracks all updates to the lobstr.io API. New releases ship every **Tuesday** and are documented here as they go live. Active subscribers receive a monthly digest email on the **1st of each month** summarising everything that shipped the previous month. ## Change types New endpoints, fields, or parameters that did not previously exist. Enhancements to existing behaviour — performance, expanded limits, new options. Bug fixes for incorrect or unexpected API behaviour. Changes that may require updates to your integration. These are rare and announced in advance. ## Stay up to date All active subscribers are automatically included in the monthly digest email — no sign-up needed. If you have questions about a specific change, reach out at [support@lobstr.io](mailto:support@lobstr.io). # Abort Run Source: https://docs.lobstr.io/docs/abort-run POST https://api.lobstr.io/v1/runs/{run_hash}/abort Stop an active run before completion This endpoint aborts an active run using its hash ID. The run will stop collecting data and begin the export process for any results already gathered. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the run to abort. Example: `300e9c5c127d421c90f431478d9a2cfb` ## Response Field Explanations The aborted run's identifier. Example: `"300e9c5c127d421c90f431478d9a2cfb"` Always "run". Example: `"run"` Run status (typically "uploading" immediately after abort). Example: `"uploading"` Whether the run has fully completed. Example: `true` Will be "aborted" for manually stopped runs. Example: `"aborted"` Number of results collected before abort. Example: `6` Run duration in seconds before abort. Example: `10.4498` Credits consumed before abort. Example: `10.4498` Aborted runs still export any results collected up to the point of abortion. You will still be charged credits for the work done before aborting. Use Get Run Stats to check progress before deciding to abort a run. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/runs/300e9c5c127d421c90f431478d9a2cfb/abort" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests run_hash = "300e9c5c127d421c90f431478d9a2cfb" url = f"https://api.lobstr.io/v1/runs/{run_hash}/abort" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.post(url, headers=headers) run = response.json() print(f"Run aborted!") print(f"Run ID: {run['id']}") print(f"Status: {run['status']}") print(f"Done Reason: {run['done_reason']}") print(f"Results collected: {run['total_results']}") print(f"Credits used: {run['credit_used']}") ``` ## Response ```json 200 theme={null} { "id": "300e9c5c127d421c90f431478d9a2cfb", "object": "run", "squid": "e445405ef4ab41208ef7d29b92a1a9dd", "is_done": true, "started_at": "2025-02-10T14:30:55Z", "total_results": 6, "total_unique_results": 6, "next_launch_at": null, "ended_at": "2025-02-10T14:31:10Z", "duration": 10.4498, "credit_used": 10.4498, "origin": "user", "force_launch": false, "status": "uploading", "export_done": null, "export_count": 0, "export_time": null, "email_done": null, "email_time": null, "created_at": "2025-02-10T14:30:55Z", "done_reason": "aborted", "done_reason_desc": null } ``` ```json 404 theme={null} { "error": { "message": "Run not found or already completed", "type": "not_found_error", "param": "run_hash" } } ``` # Add Tasks Source: https://docs.lobstr.io/docs/add-tasks POST https://api.lobstr.io/v1/tasks Create new tasks within a specified squid This endpoint creates new tasks within a specified squid. Tasks define the specific scraping jobs to be executed, such as URLs to scrape or search parameters. **Note:** The accepted task input keys (e.g., `url`, `city`, `activity`) depend on the crawler used in your squid. Use the Get Crawler Parameters endpoint to discover valid keys for your crawler. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body The hash ID of the squid to add tasks to. Example: `"a1b2c3d4e5f6g7h8i9j0"` Array of task objects. Each task contains parameters specific to the crawler. Example: `[{"url": "https://example.com"}]` ## Response Field Explanations Number of tasks that were duplicates and not added. Example: `0` Array of created task objects. Unique task identifier (hash). Example: `"c5e29d2aba8b77cdc56391e7405302de"` Always `"task"`. Task creation timestamp (ISO 8601). Example: `"2025-02-10T14:19:32.916901"` Whether the task is active and ready to run. Example: `true` Task parameters specific to the crawler (URL, search terms, etc.). Example: `{"url": "https://..."}` Identifier of the crawler module this task belongs to. Use the Get Crawler Parameters endpoint to discover which task keys are valid for your specific crawler. Duplicate tasks (same parameters) are automatically detected and not added. Check duplicated\_count in the response. Task parameters vary by crawler. Using invalid keys will result in task creation failure. For bulk task creation, consider using the Upload Tasks endpoint with a CSV file instead. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "a1b2c3d4e5f6g7h8i9j0", "tasks": [ {"url": "https://www.linkedin.com/in/johndoe"}, {"url": "https://www.linkedin.com/in/janedoe"} ] }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/tasks" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } # Define tasks to add to the squid payload = { "squid": "a1b2c3d4e5f6g7h8i9j0", "tasks": [ {"url": "https://www.linkedin.com/in/johndoe"}, {"url": "https://www.linkedin.com/in/janedoe"} ] } response = requests.post(url, headers=headers, json=payload) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") # Display created task IDs for task in data['tasks']: print(f" - {task['id']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "6b9d3afdf4e76df374915a50d7a495c4", "object": "task", "created_at": "2025-02-10T14:19:32.916901", "is_active": true, "params": {"url": "https://www.linkedin.com/in/johndoe"}, "module": "4734d096159ef05210e0e1677e8be823" }, { "id": "c5e29d2aba8b77cdc56391e7405302de", "object": "task", "created_at": "2025-02-10T14:19:32.916901", "is_active": true, "params": {"url": "https://www.linkedin.com/in/janedoe"}, "module": "4734d096159ef05210e0e1677e8be823" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid task parameters. Each task must contain required fields for the crawler.", "type": "validation_error", "param": "tasks" } } ``` # Authentication Source: https://docs.lobstr.io/docs/authentication GET https://api.lobstr.io/v1/me Learn how to authenticate your API requests using token-based authentication All requests to the lobstr.io API must include an `Authorization` header with your API token. You can obtain your API token from the [API menu](https://app.lobstr.io/dashboard/api) in your dashboard. The authentication format follows the standard Token authentication scheme: ``` Authorization: Token YOUR_API_KEY ``` Once authenticated, you'll have access to all API endpoints based on your account's permission level and subscription plan. ## Headers Your API authentication token from the dashboard. Value: `Token YOUR_API_KEY` Store your API key in environment variables rather than hardcoding it in your source code. This prevents accidental exposure in version control systems. Never share your API key publicly or commit it to public repositories. Treat it like a password. If you believe your API key has been compromised, regenerate it immediately from your dashboard. The old key will be invalidated. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/me" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests headers = { "Authorization": "Token YOUR_API_KEY", } response = requests.get( "https://api.lobstr.io/v1/me", headers=headers ) print(response.json()) ``` ## Response A successful call confirms your token is valid and returns your profile. See [Get User Profile](/docs/user-me) for the full response schema. ```json 200 theme={null} { "first_name": "John", "last_name": "Doe", "email": "user@example.com", "email_verified": true, "plan": [], "login_count": 42, "profile_image": null, "is_staff": false, "credit_interval": "monthly" } ``` # Auto Billing Reset Source: https://docs.lobstr.io/docs/auto-billing-reset GET https://api.lobstr.io/v1/plans/auto-reset Configure automatic billing cycle resets when credit usage crosses a threshold Automatically reset your billing cycle when credit usage crosses a configurable threshold — so your scrapers never stall waiting for a manual reset. A rolling 24-hour cap protects against runaway spending. ## How it works When Auto Billing Reset is enabled, a background poller checks your credit usage periodically. Once your usage exceeds `threshold_pct`, it triggers a billing cycle reset: your plan renews immediately (charging your card on file) and your credits are restored to zero consumed. The `max_resets_per_24h` cap limits how many times this can happen in any rolling 24-hour window. If the payment fails (including 3D Secure cards, which cannot complete authentication unattended), the reset is suppressed for the rest of the current billing cycle and you receive a failure email. ## Get settings Your API authentication token. Value: `Token YOUR_API_KEY` Returns your current Auto Billing Reset configuration and live usage status. ### Response fields Whether Auto Billing Reset is currently active. Credit usage percentage that triggers a reset. Example: `80` (reset when 80% of credits are consumed). Maximum number of automatic resets allowed in any rolling 24-hour window (1–10). Number of resets that have already fired in the current 24-hour window. UTC timestamp when the current 24-hour window expires and the counter resets, or `null` if no window is active. Your current credit usage as a percentage of your plan's allowance, or `null` if no active subscription. ## Update settings [https://api.lobstr.io/v1/plans/auto-reset](https://api.lobstr.io/v1/plans/auto-reset) Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` Enable or disable Auto Billing Reset. Credit usage percentage that triggers a reset. Must be between 1 and 100. Defaults to your current setting. Maximum automatic resets in any rolling 24-hour window. Must be between 1 and 10. Defaults to your current setting. If you POST with `enabled: true` and your usage is already above `threshold_pct`, an immediate reset is triggered. Auto Billing Reset charges your card on file each time it fires. Ensure `max_resets_per_24h` is set to a value you're comfortable with before enabling. ## Code Examples ```bash GET theme={null} curl -X GET "https://api.lobstr.io/v1/plans/auto-reset" \ -H "Authorization: Token YOUR_API_KEY" ``` ```bash POST theme={null} curl -X POST "https://api.lobstr.io/v1/plans/auto-reset" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "threshold_pct": 80, "max_resets_per_24h": 2 }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"} # Get current settings res = requests.get(f"{BASE_URL}/plans/auto-reset", headers=headers) print(res.json()) # Enable with threshold at 80%, max 2 resets per day res = requests.post(f"{BASE_URL}/plans/auto-reset", headers=headers, json={"enabled": True, "threshold_pct": 80, "max_resets_per_24h": 2} ) print(res.json()) ``` ## GET Response ```json 200 theme={null} { "enabled": true, "threshold_pct": 80, "max_resets_per_24h": 2, "resets_used_in_window": 1, "window_resets_at": "2026-08-02T14:30:00Z", "current_usage_pct": 73.4 } ``` ## POST Response ```json 200 theme={null} { "enabled": true, "threshold_pct": 80, "max_resets_per_24h": 2, "resets_used_in_window": 0, "window_resets_at": null, "current_usage_pct": 73.4 } ``` # Check Sync Status Source: https://docs.lobstr.io/docs/check-sync-status GET https://api.lobstr.io/v1/synchronize/{sync_task_id} Monitor the synchronization status of a cookie update task This endpoint checks the synchronization status of a cookie update task using its hash ID. Use this to monitor whether your account cookies have been successfully synchronized. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The synchronization task ID returned from Sync Account or Refresh Cookies. Example: `75bed0d425c4bc1912a17fe9fc4dd2a1` ## Response Field Explanations Synchronization task identifier. Example: `"75bed0d425c4bc1912a17fe9fc4dd2a1"` Always "synchronize-cookies". Example: `"synchronize-cookies"` Task status code (100=created, 120=synchronizing, 200=synchronized). Example: `200` Human-readable status. Example: `"synchronized"` Hash of the created/updated account. Example: `"84efd37ebd21c0f232826b7763b403d3"` Poll this endpoint every few seconds after initiating a sync until status\_code reaches 200 (synchronized) or an error state. Once status\_code is 200, use the returned account\_hash to access the synchronized account with Get Account Details. If synchronization remains at status\_code 120 for more than 30 seconds, the cookies may be invalid. Try re-syncing with fresh cookies. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/synchronize/75bed0d425c4bc1912a17fe9fc4dd2a1" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests import time sync_task_id = "75bed0d425c4bc1912a17fe9fc4dd2a1" url = f"https://api.lobstr.io/v1/synchronize/{sync_task_id}" headers = { "Authorization": "Token YOUR_API_KEY" } # Poll until synchronization completes while True: response = requests.get(url, headers=headers) data = response.json() status_code = data['status_code'] status_text = data['status_text'] print(f"Status: {status_code} - {status_text}") if status_code == 100: print(" Task created, waiting...") elif status_code == 120: print(" Synchronizing cookies...") elif status_code == 200: print(f"\n✓ Success! Account hash: {data['account_hash']}") break elif status_code >= 400: print(f"\n✗ Failed: {status_text}") break time.sleep(2) ``` ## Response ```json 120 theme={null} { "id": "75bed0d425c4bc1912a17fe9fc4dd2a1", "object": "synchronize-cookies", "status_code": 120, "status_text": "synchronizing", "account_hash": "84efd37ebd21c0f232826b7763b403d3" } ``` ```json 200 theme={null} { "id": "75bed0d425c4bc1912a17fe9fc4dd2a1", "object": "synchronize-cookies", "status_code": 200, "status_text": "synchronized", "account_hash": "84efd37ebd21c0f232826b7763b403d3" } ``` ```json 404 theme={null} { "detail": "Synchronization task not found." } ``` # Check Upload Status Source: https://docs.lobstr.io/docs/check-upload-status GET https://api.lobstr.io/v1/tasks/upload/{upload_task_id} Monitor the status of a task upload operation This endpoint checks the status of a task upload operation using the upload task ID returned from the Upload Tasks endpoint. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The upload task ID returned from Upload Tasks endpoint. Example: `427a7bfc54cf4ce483d83ba23425164b` ## Response Field Explanations Upload task identifier. Example: `"427a7bfc54cf4ce483d83ba23425164b"` Always "task\_upload". Example: `"task_upload"` Current upload state (PENDING, PROGRESS, SUCCESS, FAILURE). Example: `"SUCCESS"` Number of duplicate tasks skipped. Example: `0` Number of tasks successfully inserted. Example: `8` Number of invalid rows in the file. Example: `0` Number of valid rows processed. Example: `8` ## State Values | State | Description | | - | - | | **PENDING** | Upload task is queued and waiting to start | | **PROGRESS** | File is being processed | | **SUCCESS** | Upload completed successfully | | **FAILURE** | Upload failed due to an error | Poll this endpoint periodically until state is SUCCESS or FAILURE before running your squid. Check meta.invalid to identify how many rows had issues. Review your CSV format if this number is high. Don't start a squid run until the upload state is SUCCESS, or you may miss tasks. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/tasks/upload/427a7bfc54cf4ce483d83ba23425164b" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests import time url = "https://api.lobstr.io/v1/tasks/upload/427a7bfc54cf4ce483d83ba23425164b" headers = { "Authorization": "Token YOUR_API_KEY" } # Poll until upload completes while True: response = requests.get(url, headers=headers) data = response.json() state = data['state'] print(f"Upload state: {state}") if state == "SUCCESS": print(f"Inserted: {data['meta']['inserted']} tasks") print(f"Duplicates: {data['meta']['duplicates']}") print(f"Invalid rows: {data['meta']['invalid']}") break elif state == "FAILURE": print("Upload failed!") break else: time.sleep(2) # Wait before polling again ``` ## Response ```json 200 theme={null} { "id": "427a7bfc54cf4ce483d83ba23425164b", "object": "task_upload", "state": "SUCCESS", "meta": { "duplicates": 0, "inserted": 8, "invalid": 0, "valid": 8 } } ``` ```json 202 theme={null} { "id": "427a7bfc54cf4ce483d83ba23425164b", "object": "task_upload", "state": "PROGRESS", "meta": null } ``` ```json 404 theme={null} { "error": { "message": "Upload task not found", "type": "not_found_error", "param": "upload_task_id" } } ``` # CLI Source: https://docs.lobstr.io/docs/cli Command-line interface for the lobstr.io API. Run scrapers, manage squids, download results — all from your terminal. ## Installation ```bash theme={null} pip install lobstrio ``` Requires Python 3.10+. ## Environment variables | Variable | Description | | - | - | | `LOBSTR_TOKEN` | API token, overriding the one saved by `lobstr config set-token`. | | `LOBSTR_API_BASE` | Point the CLI at a different API base URL (e.g. a staging or self-hosted instance). Defaults to production (`https://api.lobstr.io/v1/`) when unset. | ```bash theme={null} export LOBSTR_TOKEN=your_api_key ``` Combines create, configure, add tasks, run, and download into a single command. Search and explore every crawler by slug before running. Download results with a live progress bar while runs complete in the background. Configure delivery to email, Google Sheets, S3, SFTP, or webhook from the terminal. ## Quick Start ```bash lobstr go theme={null} # Scrape Google Maps in one command lobstr go google-maps-leads-scraper \ "https://google.com/maps/search/restaurants+paris" \ -o leads.csv # Keyword-based search lobstr go google-search-scraper "pizza delivery" --key keyword # With parameters and concurrency lobstr go google-maps-leads-scraper url1 url2 \ --param max_results=200 --concurrency 3 # With add-ons (extra credits) lobstr go youtube-channel-scraper "https://www.youtube.com/@YouTube" \ --function get_videos # Don't download, just kick off lobstr go twitter-profile-scraper @elonmusk --no-download # Account-backed crawler (e.g. Sales Navigator): auto-picks the one # healthy, unlocked matching account if there's exactly one lobstr go sales-navigator-leads-scraper "https://linkedin.com/..." # ...or name it explicitly (needed when there's more than one candidate) lobstr go sales-navigator-leads-scraper "https://linkedin.com/..." --account jane@example.com ``` ```bash Step by step theme={null} lobstr crawlers search "google maps" lobstr squid create google-maps-leads-scraper --name "Paris Restaurants" lobstr task add SQUID_ID "https://google.com/maps/search/restaurants+paris" lobstr run start SQUID_ID --wait lobstr results get SQUID_ID --format csv -o results.csv # Check who you are lobstr whoami ``` **Account-backed crawlers** (LinkedIn, Sales Navigator, …) need a connected account before they can run. `go` links one automatically when exactly one healthy, unlocked account matches the crawler's account type; when it can't, it names the matching candidates, or the account type to connect, so you can pass `--account` yourself. It never auto-picks onto a squid that already has an account, so a reused squid (`go --name`) keeps what it had. A wrong-type account, an unknown account, or `--account` on a crawler that doesn't need one each fail with a clear message before anything is created; if linking fails after the squid is created, or the command is interrupted before the run starts, the squid is removed rather than left behind. ## Command Reference ### Crawlers | Command | Description | | - | - | | `crawlers ls` | List all available crawlers | | `crawlers search ` | Search crawlers by keyword | | `crawlers show ` | Get crawler details by slug | | `crawlers params ` | Get supported parameters for a crawler | | `crawlers attrs ` | Get output attributes for a crawler | `crawlers ls`, `show`, and `search` show which account type a crawler needs (for example `sales-nav-sync`) in the "Needs Account" column, in place of a plain yes or no — that's the value to look for when picking a matching account for `--account` below. A crawler that needs no account still shows "no". `--json` output is unchanged. ### Squids | Command | Description | | - | - | | `squid create --name "My Scraper"` | Create a new squid for a crawler | | `squid ls` | List all squids in your account | | `squid show ` | Get squid details by ID | | `squid update --param key=value` | Update squid settings or parameters | | `squid update --function ` | Turn an add-on on (`=false` turns it off). Repeatable; names from `crawlers params `. Also on `go`. | | `squid update --account ` | Link a connected account to the squid, in addition to any it already has | | `squid update --replace-accounts --account ` | Set the squid's account list outright, detaching any account not passed | | `squid empty ` | Remove all tasks from a squid | | `squid rm ` | Permanently delete a squid | **Linking an account.** `--account` (repeatable) takes either an account's username or a hash — a hash prefix is enough. It's additive: the account is added to whatever the squid already has. `--replace-accounts` sets the list outright instead, printing which accounts it's about to detach before doing it; passed with no `--account` at all, it detaches every account. `squid create` has no `--account` — the API only accepts an account list on `squid update`. ### Tasks | Command | Description | | - | - | | `task add ...` | Add one or more task URLs to a squid | | `task upload ` | Bulk upload tasks from a CSV file | | `task ls ` | List tasks for a squid | | `task rm ` | Delete a task by ID | ### Runs | Command | Description | | - | - | | `run start ` | Start a new run and return immediately | | `run start --wait` | Start a run and poll until it completes | | `run start --wait --timeout --poll ` | Wait with a time limit and custom poll interval — on timeout, exits non-zero and the run keeps going | | `run watch [--timeout ] [--poll ]` | Attach to a running run and follow its progress | | `run ls ` | List all runs for a squid | | `run show ` | Get run details by ID | | `run stats ` | Get statistics for a run | | `run abort ` | Abort an in-progress run | | `run download -o results.csv` | Download run results to a file | `--wait`, `--timeout` and `--download` all follow the run to completion. `--timeout ` bounds the wait — if the run hasn't finished by then, the command exits non-zero and prints how to re-attach (`lobstr run watch `); the run is **not** aborted and keeps running server-side. `--poll ` sets how often status is checked (default 3). ### Results | Command | Description | | - | - | | `results get --format csv -o data.csv` | Get results for a squid and export to file | ### Delivery | Command | Description | | - | - | | `delivery email --email user@example.com` | Configure email delivery for a squid | | `delivery webhook --url https://...` | Configure webhook delivery for a squid | | `delivery s3 --bucket my-bucket` | Configure Amazon S3 delivery for a squid | | `delivery googlesheet --url https://...` | Configure Google Sheet delivery for a squid | | `delivery sftp --host ... --username ... --password ... --directory ...` | Configure SFTP delivery for a squid | | `delivery test-email --email user@example.com` | Test an email delivery config before activating it | | `delivery test-webhook --url https://...` | Test a webhook delivery config before activating it | | `delivery test-s3 --bucket my-bucket` | Test an S3 delivery config before activating it | | `delivery test-googlesheet --url https://...` | Test a Google Sheet delivery config before activating it | | `delivery test-sftp --host ... --username ... --password ... --directory ...` | Test an SFTP delivery config before activating it | # Community Story Rewards Source: https://docs.lobstr.io/docs/community-rewards Earn bonus credits by sharing your lobstr.io story on Reddit or LinkedIn Community Story Rewards lets you earn bonus credits — equal to 20% of your plan's credit allowance — by posting about your experience using lobstr.io on an eligible subreddit or as a LinkedIn post. One reward is available per billing quarter, per account. ## How it works 1. Write a genuine post about your lobstr.io use case on one of the [eligible subreddits](#list-eligible-subreddits) **or** publish a standalone LinkedIn post. 2. Submit the Reddit or LinkedIn URL via the API (or the dashboard). The post is automatically verified for content and liveness. 3. If approved, bonus credits are added to your account and valid until the end of your current billing period. ## List eligible subreddits [https://api.lobstr.io/v1/community\_rewards/subreddits](https://api.lobstr.io/v1/community_rewards/subreddits) Returns the list of subreddits that qualify for a reward submission, along with the exact credit amount the authenticated user would receive if approved. Your API authentication token. Value: `Token YOUR_API_KEY` ```json 200 theme={null} { "results": ["SaaS", "entrepreneur", "learnpython", "MachineLearning"], "estimated_reward_credits": 2000 } ``` `estimated_reward_credits` is the actual credit amount you would earn — 20% of your plan's execution credits, computed server-side using the same formula as the grant. `null` if you have no active subscription. ## Submit a story [https://api.lobstr.io/v1/community\_rewards/submissions](https://api.lobstr.io/v1/community_rewards/submissions) Submit a Reddit or LinkedIn post URL for review. Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` Full URL of your Reddit post or LinkedIn post. For Reddit, must be in an eligible subreddit. Example: `https://www.reddit.com/r/SaaS/comments/abc123/my_lobstr_experience/` or `https://www.linkedin.com/posts/yourname_activity-123456789/` Platform of the submission: `reddit` (default) or `linkedin`. When omitted, `reddit` is assumed. LinkedIn posts have no subreddit allowlist — any public standalone post is eligible. Only one submission per quarter is reviewed. If an earlier submission in the same quarter was rejected you may resubmit — the most recent submission takes precedence. ## Check your submission [https://api.lobstr.io/v1/community\_rewards/submissions](https://api.lobstr.io/v1/community_rewards/submissions) Returns your most recent submission for the current quarter, or `null` if you haven't submitted one yet. Your API authentication token. Value: `Token YOUR_API_KEY` ```json 200 theme={null} { "submission": { "id": 42, "platform": "reddit", "url": "https://www.reddit.com/r/SaaS/comments/abc123/my_lobstr_experience/", "reddit_url": "https://www.reddit.com/r/SaaS/comments/abc123/my_lobstr_experience/", "status": "pending", "submitted_at": "2026-08-15T10:30:00Z", "quarter_key": "2026-Q3" } } ``` Possible `status` values: `pending` (under review), `gifted` (approved, credits granted), `rejected`. ## Code Example ```bash cURL theme={null} # Check eligible subreddits curl "https://api.lobstr.io/v1/community_rewards/subreddits" \ -H "Authorization: Token YOUR_API_KEY" # Submit a Reddit story curl -X POST "https://api.lobstr.io/v1/community_rewards/submissions" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://www.reddit.com/r/SaaS/comments/abc123/my_lobstr_experience/", "platform": "reddit"}' # Submit a LinkedIn story curl -X POST "https://api.lobstr.io/v1/community_rewards/submissions" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://www.linkedin.com/posts/yourname_activity-123456789/", "platform": "linkedin"}' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} # List eligible subreddits subreddits = requests.get(f"{BASE_URL}/community_rewards/subreddits", headers=headers).json() print("Eligible:", subreddits["results"]) # Submit a Reddit story response = requests.post( f"{BASE_URL}/community_rewards/submissions", headers={**headers, "Content-Type": "application/json"}, json={"url": "https://www.reddit.com/r/SaaS/comments/abc123/my_lobstr_experience/", "platform": "reddit"} ) print(response.json()) # Submit a LinkedIn story response = requests.post( f"{BASE_URL}/community_rewards/submissions", headers={**headers, "Content-Type": "application/json"}, json={"url": "https://www.linkedin.com/posts/yourname_activity-123456789/", "platform": "linkedin"} ) print(response.json()) ``` ## Error Responses ```json 400 SubredditNotEligible theme={null} { "error": "SubredditNotEligible", "message": "r/example isn't on the eligible-subreddit list for Community Story Rewards." } ``` ```json 400 InvalidRedditUrl theme={null} { "error": "InvalidRedditUrl", "message": "That doesn't look like a Reddit comment/post URL (expected a reddit.com/r//... link)." } ``` ```json 400 InvalidLinkedinUrl theme={null} { "error": "InvalidLinkedinUrl", "message": "That doesn't look like a LinkedIn post URL (expected a linkedin.com/posts/... or linkedin.com/feed/update/urn:li:activity:... link)." } ``` ```json 400 LinkedinCommentNotEligible theme={null} { "error": "LinkedinCommentNotEligible", "message": "That's a link to a comment. The LinkedIn program is for standalone posts only — please submit the URL of your post itself." } ``` # Concepts Source: https://docs.lobstr.io/docs/concepts Understand the core building blocks of the lobstr.io API ## The data model Everything in lobstr.io revolves around five objects: **Crawlers**, **Squids**, **Tasks**, **Runs**, and **Accounts**. Understanding how they relate to each other makes the API straightforward to use. ``` Crawler (what to scrape) └── Squid (your project config) ├── Tasks (what inputs to process) ├── Runs (executions of those tasks) │ └── Results (output data) └── Accounts (platform logins, if needed) ``` *** ## Crawler A crawler is a pre-built scraper module for a specific website or platform — Google Maps, LinkedIn, Amazon, etc. lobstr.io maintains the crawlers; you just configure and run them. Crawlers define: * What **task parameters** they accept (e.g., `url`, `keyword`, `location`) * What **result attributes** they return (e.g., `name`, `rating`, `phone`) * Whether they require a linked **Account** (e.g., LinkedIn requires a LinkedIn login) Use [List Crawlers](/docs/list-crawlers) to browse what's available, and [Get Crawler Parameters](/docs/get-crawler-parameters) to see what inputs a specific crawler accepts. *** ## Squid A squid is your personal scraping project. It binds a crawler to your configuration and holds your tasks. Think of it like a saved search or a project folder: you create one squid per scraping job, configure its settings (concurrency, schedule, delivery), add tasks to it, and launch runs from it. Key properties: * **crawler** — which crawler the squid uses * **params** — optional settings specific to the crawler (e.g., language, country) * **concurrency** — how many tasks to run in parallel * **schedule** — optional cron expression to run automatically The name "squid" is a nod to the lobstr.io theme — a squid is what holds your scraping configuration together. *** ## Task A task is a single unit of work — one URL to scrape, one search query to run, one profile to look up. Tasks live inside a squid and are processed during runs. Tasks are cheap to add in bulk. You can add thousands at once via the [Add Tasks](/docs/add-tasks) endpoint or upload a CSV file via [Upload Tasks](/docs/upload-tasks). Key properties: * **params** — the input for this task (e.g., `{"url": "https://..."}`) * **is\_active** — whether the task will be included in the next run * Duplicate tasks (same params) are automatically detected and skipped *** ## Run A run is a single execution of a squid's pending tasks. When you start a run, lobstr.io processes all active tasks in the squid and collects results. Runs are immutable once started — you can abort them, but not edit them. **Run lifecycle:** | Status | Meaning | | - | - | | `pending` | Queued, waiting to start | | `running` | Actively processing tasks | | `uploading` | Processing complete, exporting results | | `paused` | Temporarily paused | | `done` | Completed successfully | | `aborted` | Stopped manually | | `error` | Failed due to an error | Results become available once status is `done`. Poll [Get Run](/docs/get-run) until you reach a terminal status, then fetch results. *** ## Account Some crawlers (LinkedIn, Instagram, Facebook, etc.) require a logged-in platform account to scrape data. You link these accounts to lobstr.io via the Accounts API. Once linked, you assign the account to a squid, and lobstr.io uses it automatically when running tasks. Accounts can expire (cookies time out), so the API provides endpoints to refresh them. Accounts contain platform session cookies. Only use accounts you own and are authorized to use. *** ## Credits Credits are the currency used to pay for scraping. Each result collected consumes credits, with the rate depending on the crawler and any optional enrichment functions (e.g., email verification). Check your balance with [Get Balance](/docs/get-balance) before launching large runs. *** ## Results Results are the scraped data rows collected during runs. They're stored and queryable per squid via [Get Results](/docs/get-results), or downloadable as a file via [Download Run](/docs/download-run). # Configure Email Delivery Source: https://docs.lobstr.io/docs/configure-email-delivery POST https://api.lobstr.io/v1/delivery?squid={squid_hash} Set up email notifications for squid run completions Configure email delivery to receive notifications when your squid runs complete. You can choose to receive immediate notifications or attach results for later use. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Query Parameters The unique identifier (hash) of the squid for which to configure email delivery. Example: `c106a44a98044ef18acc59986ae10967` ## Request Body The email address to receive notifications. Example: `"user@example.com"` Set to true to send email immediately upon completion, or false to attach it for later use. Example: `true` ## Response Field Explanations The configured email address. Example: `"user@example.com"` Whether immediate notifications are enabled. Example: `true` ISO timestamp when notifications were activated. Example: `"2025-02-26T15:48:48.538226"` Set notifications to false if you want to manage email delivery manually rather than receiving automatic notifications. The notifications\_activation\_date is automatically set when you enable notifications for the first time. Make sure the email address is valid and can receive emails. Invalid addresses will cause delivery failures. Use the Test Email endpoint to verify your email configuration before activating notifications. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/delivery?squid=YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "user@example.com", "notifications": true }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/delivery" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } params = { "squid": "YOUR_SQUID_HASH" } payload = { "email": "user@example.com", "notifications": True } response = requests.post(url, headers=headers, params=params, json=payload) result = response.json() print("Email delivery configured successfully!") print(f"Email: {result['email']}") print(f"Notifications: {result['notifications']}") if 'notifications_activation_date' in result: print(f"Activated on: {result['notifications_activation_date']}") ``` ## Response ```json 201 theme={null} { "email": "user@example.com", "notifications": true, "notifications_activation_date": "2025-02-26T15:48:48.538226" } ``` # Configure Google Sheet Delivery Source: https://docs.lobstr.io/docs/configure-google-sheet-delivery POST https://api.lobstr.io/v1/delivery?squid={squid_hash} Export squid run results directly to a shared Google Sheet Configure Google Sheet delivery to export run results directly to a shared Google Sheet. Results can be overwritten with each run or appended with deduplication. ## Behavior * **append = false**: Only the latest run's data is exported. Any previously exported data is overwritten. * **append = true**: Data from all runs is appended and deduplicated before export. ## Requirements * The Google Sheet must be shared with "Anyone with the link" * The sheet must have **Editor** access permission * Export is limited to 100,000 rows ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Query Parameters The unique identifier (hash) of the squid for which to configure Google Sheet delivery. Example: `c106a44a98044ef18acc59986ae10967` ## Request Body Public Google Sheet URL (must be accessible with Editor permission). Example: `"https://docs.google.com/spreadsheets/d/1ly9nwTs-hNaFCzWtSljevSf16chs5Nn0PIv_TpQSEhA/edit?usp=sharing"` false: Overwrites previous data with the last run's result. true: Appends new results, deduplicated. Example: `false` Set to true to enable Google Sheet export, false to disable. Example: `true` ## Response Field Explanations The configured Google Sheet URL. Example: `"https://docs.google.com/spreadsheets/d/1ly9nwTs-hNaFCzWtSljevSf16chs5Nn0PIv_TpQSEhA/edit?usp=sharing"` Whether Google Sheet export is active. Example: `true` Append mode setting. Example: `false` The Google Sheet MUST be shared with 'Anyone with the link' and have Editor permissions. Without these settings, export will fail. Use append: false for dashboards where you only want the latest data. Use append: true for historical tracking. When append is true, Lobstr automatically deduplicates rows before exporting, so you won't get duplicate entries. Export is limited to 100,000 rows. If your squid generates more results, consider using S3 or SFTP delivery instead. Use the Test Google Sheet endpoint to verify your sheet permissions before activating automatic delivery. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/delivery?squid=YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "google_sheet_fields": { "url": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit?usp=sharing", "append": false, "is_active": true } }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/delivery" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } params = { "squid": "YOUR_SQUID_HASH" } payload = { "google_sheet_fields": { "url": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit?usp=sharing", "append": False, "is_active": True } } response = requests.post(url, headers=headers, params=params, json=payload) result = response.json() print("Google Sheet delivery configured successfully!") print(f"Sheet URL: {result['google_sheet_fields']['url']}") print(f"Append mode: {result['google_sheet_fields']['append']}") print(f"Active: {result['google_sheet_fields']['is_active']}") ``` ## Response ```json 201 theme={null} { "google_sheet_fields": { "url": "https://docs.google.com/spreadsheets/d/1ly9nwTs-hNaFCzWtSljevSf16chs5Nn0PIv_TpQSEhA/edit?usp=sharing", "is_active": true, "append": false } } ``` # Configure Amazon S3 Delivery Source: https://docs.lobstr.io/docs/configure-s3-delivery POST https://api.lobstr.io/v1/delivery?squid={squid_hash} Export squid run results directly to an AWS S3 bucket Configure Amazon S3 delivery to export run results directly to an AWS S3 bucket. Results will be automatically uploaded to your specified bucket and path when runs complete. ## Authentication Options You can authenticate with S3 in two ways: 1. **AWS Credentials**: Provide `aws_access_key` and `aws_secret_key` in the request 2. **Bucket Policy**: If you don't provide credentials, ensure your bucket policy allows public WRITE permissions ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Query Parameters The unique identifier (hash) of the squid for which to configure S3 delivery. Example: `c106a44a98044ef18acc59986ae10967` ## Request Body Name of the S3 bucket where data will be stored. Example: `"my-bucket"` Set to true to enable S3 delivery, false to disable. Example: `true` Folder path inside the bucket where results will be saved. Example: `"exports"` (Optional) AWS Access Key for authentication. If not provided, bucket must have public WRITE permissions. Example: `"AKIAIOSFODNN7EXAMPLE"` (Optional) AWS Secret Key for authentication. If not provided, bucket must have public WRITE permissions. Example: `"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"` ## Response Field Explanations S3 bucket name. Example: `"my-bucket"` Whether S3 delivery is active. Example: `true` Target folder path in bucket. Example: `"exports"` AWS Access Key (returned if provided). Example: `"AKIAIOSFODNN7EXAMPLE"` AWS Secret Key (returned if provided). Example: `"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"` If you don't provide AWS credentials, your bucket policy MUST allow public WRITE permissions for Lobstr to upload files. For better security, provide AWS credentials instead of making your bucket publicly writable. Use IAM users with limited permissions. The target\_path creates a folder structure in your bucket. Results will be uploaded to s3://bucket/target\_path/filename.csv Use the Test S3 endpoint to verify your bucket permissions and credentials before activating automatic delivery. AWS credentials are stored and returned in API responses. Ensure you're using HTTPS and handle responses securely. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/delivery?squid=YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "s3_fields": { "bucket": "my-bucket", "is_active": true, "target_path": "exports", "aws_access_key": "your_access_key", "aws_secret_key": "your_secret_key" } }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/delivery" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } params = { "squid": "YOUR_SQUID_HASH" } payload = { "s3_fields": { "bucket": "my-bucket", "is_active": True, "target_path": "exports", "aws_access_key": "your_access_key", "aws_secret_key": "your_secret_key" } } response = requests.post(url, headers=headers, params=params, json=payload) result = response.json() print("Amazon S3 delivery configured successfully!") print(f"Bucket: {result['s3_fields']['bucket']}") print(f"Target path: {result['s3_fields']['target_path']}") print(f"Active: {result['s3_fields']['is_active']}") ``` ## Response ```json 201 theme={null} { "s3_fields": { "bucket": "my-bucket", "is_active": true, "target_path": "exports", "aws_access_key": "your_access_key", "aws_secret_key": "your_secret_key" } } ``` # Configure SFTP Delivery Source: https://docs.lobstr.io/docs/configure-sftp-delivery POST https://api.lobstr.io/v1/delivery?squid={squid_hash} Set up secure SFTP server delivery for squid run results Configure SFTP delivery to securely store run results on your own SFTP server. Results will be automatically uploaded to your specified server and directory when runs complete. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Query Parameters The unique identifier (hash) of the squid for which to configure SFTP delivery. Example: `c106a44a98044ef18acc59986ae10967` ## Request Body SFTP server hostname or IP address. Example: `"sftp.example.com"` SFTP server port number (default is 22). Example: `22` Username for SFTP authentication. Example: `"user"` Password for SFTP authentication. Example: `"myC00lP@ssword"` Target directory path on the SFTP server where files will be uploaded. Example: `"/upload/path"` Set to true to enable SFTP delivery, false to disable. Example: `true` ## Response Field Explanations SFTP server hostname. Example: `"sftp.example.com"` SFTP server port. Example: `22` SFTP username. Example: `"user"` SFTP password (returned in response). Example: `"myC00lP@ssword"` Target directory path. Example: `"/upload/path"` Whether SFTP delivery is active. Example: `true` Ensure your SFTP server is accessible from lobstr.io's servers. Check firewall rules and IP allowlists if connection fails. Use the Test SFTP endpoint to verify your credentials and server connectivity before activating automatic delivery. The directory path must exist on the server. Lobstr will not create directories automatically. Store SFTP credentials securely. While they're returned in API responses, treat them as sensitive data. Set is\_active to false to temporarily disable SFTP delivery without removing your configuration. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/delivery?squid=YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ftp_fields": { "host": "sftp.example.com", "port": 22, "username": "user", "password": "password", "directory": "/upload/path", "is_active": true } }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/delivery" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } params = { "squid": "YOUR_SQUID_HASH" } payload = { "ftp_fields": { "host": "sftp.example.com", "port": 22, "username": "user", "password": "password", "directory": "/upload/path", "is_active": True } } response = requests.post(url, headers=headers, params=params, json=payload) result = response.json() print("SFTP delivery configured successfully!") print(f"Host: {result['ftp_fields']['host']}") print(f"Port: {result['ftp_fields']['port']}") print(f"Username: {result['ftp_fields']['username']}") print(f"Directory: {result['ftp_fields']['directory']}") print(f"Active: {result['ftp_fields']['is_active']}") ``` ## Response ```json 201 theme={null} { "ftp_fields": { "host": "sftp.example.com", "port": 22, "username": "user", "password": "password", "directory": "/upload/path" } } ``` # Configure Squid Chain Source: https://docs.lobstr.io/docs/configure-squid-chain POST https://api.lobstr.io/v1/squids/{id}/chain Chain two crawlers together so results from one automatically feed into another Crawler chaining lets you connect two squids so that when a run on the **source squid** completes, its results are automatically extracted and queued as tasks on a **target squid**, triggering a new run downstream. **Example use case:** Run a Google Maps Leads scrape to collect place URLs, then automatically pass those URLs into a Google Maps Reviews scrape — without any manual intervention. Chains are limited to a maximum depth of 3 squids. A squid can only have one outgoing chain at a time. ## How it works 1. You configure a chain on a source squid, specifying the target crawler and a `field_map` 2. When a run on the source squid completes with a status of **`DONE`**, the scheduler extracts the mapped fields from its results 3. Those values are queued as tasks on the target squid (auto-created on first trigger if it doesn't exist yet) 4. If `autostart` is `true`, a new run starts immediately on the target squid The chain is only triggered when the source run reaches a status of `DONE`. Runs that end with `ERROR` or any other status will not trigger the downstream chain. ## Path Parameters Hash ID of the source squid. Example: `"e86b29c032024b66aff529e1d43c2bd7"` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body Hash ID of the target crawler. Use `GET /v1/crawlers` to find it. Example: `"9a3f1c8b2e7d4a56f0e1b2c3d4e5f678"` Maps a result field from the source crawler to an input parameter on the target crawler. Example: `{"url": "url"}` — passes the `url` field from source results as the `url` input on the target. If `true`, the downstream run starts automatically when tasks are queued. If `false`, tasks are queued and the run is created as paused for manual review. Defaults to `true`. Custom name for the auto-created target squid. If omitted, defaults to `"{Crawler Name} (N) (chained)"`. Concurrency to apply to the auto-created target squid. Defaults to `1`. ## Response Fields Unique chain config identifier. Details of the target crawler. Crawler hash ID Human-readable crawler name Maximum concurrency supported by this crawler The auto-created target squid. `null` until the first chain trigger fires. The configured field mapping. Whether the chain is currently active. Whether downstream runs start automatically. Configured name for the target squid. Configured concurrency for the target squid. ISO 8601 timestamp of when the chain was configured. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "target_module_id": "9a3f1c8b2e7d4a56f0e1b2c3d4e5f678", "field_map": {"url": "url"}, "autostart": true, "cluster_name": "Reviews (chained)", "cluster_concurrency": 3 }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "target_module_id": "9a3f1c8b2e7d4a56f0e1b2c3d4e5f678", "field_map": {"url": "url"}, "autostart": True, "cluster_name": "Reviews (chained)", "cluster_concurrency": 3 } response = requests.post(url, headers=headers, json=payload) print(response.json()) ``` ## Response ```json 201 theme={null} { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "target_module": { "id": "9a3f1c8b2e7d4a56f0e1b2c3d4e5f678", "public_name": "Google Maps Reviews Scraper", "name": "googlemapreviews_matrix", "max_concurrency": 10 }, "target_cluster": null, "field_map": {"url": "url"}, "is_active": true, "autostart": true, "cluster_name": "Reviews (chained)", "cluster_concurrency": 3, "created_at": "2026-04-28T10:00:00Z" } ``` ```json 400 theme={null} { "error": "field_map is required and must be a dict." } ``` ```json 409 theme={null} { "error": "This squid already has a chain configured." } ``` ```json 422 theme={null} { "error": "Chain depth limit of 3 reached." } ``` # Configure Webhook Delivery Source: https://docs.lobstr.io/docs/configure-webhook-delivery POST https://api.lobstr.io/v1/delivery?squid={squid_hash} Set up real-time webhook notifications for squid run events Configure webhooks to receive real-time HTTP POST notifications when your squid's events occur. Subscribe to specific events like run start, completion, pause, or errors. ### Event Types | Event | Description | Trigger Condition | | - | - | - | | **run.running** | Run is actively executing | Emitted when a Squid run begins or resumes | | **run.paused** | Run paused | Emitted when the run is temporarily halted (e.g., account limits reached) | | **run.done** | Run completed successfully | Emitted when the run finishes without errors | | **run.error** | Unexpected error occurred | When a run has crashed with an error | ## Webhook Payload Lobstr sends a JSON payload to your webhook URL: ```json theme={null} { "id": "c39b1922a5424c3c84a7cb2ec731bc5f", "object": "run", "event": "run.done", "squid": { "id": "8177beb16fdf4e0e8d4b2ba767d1ffb5", "name": "Google Maps Search Export (1)" }, "timestamp": "2025/06/18 17:32:31" } ``` ### Payload Fields | Field | Type | Description | | - | - | - | | **id** | string | Unique identifier for the run (hash) | | **object** | string | Always "run" | | **event** | string | One of the subscribed Event Types | | **squid.id** | string | Squid hash | | **squid.name** | string | Human-friendly Squid name | | **timestamp** | string | Event timestamp in YYYY/MM/DD HH:MM:SS format (UTC) | ## Retry Mechanism When `retry` is enabled: * Failed webhook deliveries are retried **up to 3 times** * Retries occur with a **15-minute delay** between attempts ## Webhook Response Requirements * Your endpoint should respond within **30 seconds** * Return **HTTP 200, 201, or 202** to indicate successful receipt ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Query Parameters The unique identifier (hash) of the squid for which to configure webhook delivery. Example: `c106a44a98044ef18acc59986ae10967` ## Request Body Your webhook endpoint URL that will receive POST requests. Example: `"https://your-webhook.com/endpoint"` Master switch to enable/disable webhooks. Example: `true` Enable automatic retries for failed webhook deliveries (up to 3 attempts with 15-minute delays). Example: `false` Subscribe to run start/resume events. Example: `true` Subscribe to run pause events. Example: `false` Subscribe to run completion events. Example: `false` Subscribe to run error events. Example: `true` ## Response Field Explanations Configured webhook endpoint URL. Example: `"https://your-webhook.com/endpoint"` Whether webhooks are active. Example: `true` Whether retry mechanism is enabled. Example: `false` Subscription status for run.running events. Example: `true` Subscription status for run.paused events. Example: `false` Subscription status for run.done events. Example: `false` Subscription status for run.error events. Example: `true` Subscribe only to events you need. For most use cases, run.done and run.error are sufficient. Your webhook endpoint must respond within 30 seconds or the delivery will be marked as failed. Enable retry for production webhooks to handle temporary network issues or server downtime automatically. Webhook payloads are sent as JSON with Content-Type: application/json header. Parse the request body to extract event data. Use the Test Webhook endpoint to verify your endpoint is accessible and responding correctly before activating webhooks. Implement proper authentication/validation in your webhook endpoint to ensure requests are coming from lobstr.io. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/delivery?squid=YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "webhook_fields": { "url": "https://your-webhook.com/endpoint", "is_active": true, "retry": false, "events": { "run.running": true, "run.paused": false, "run.done": false, "run.error": true } } }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/delivery" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } params = { "squid": "YOUR_SQUID_HASH" } payload = { "webhook_fields": { "url": "https://your-webhook.com/endpoint", "is_active": True, "retry": False, "events": { "run.running": True, "run.paused": False, "run.done": False, "run.error": True } } } response = requests.post(url, headers=headers, params=params, json=payload) result = response.json() print("Webhook delivery configured successfully!") print(f"Webhook URL: {result['webhook_fields']['url']}") print(f"Active: {result['webhook_fields']['is_active']}") print(f"Retry enabled: {result['webhook_fields']['retry']}") print("\nSubscribed events:") for event, subscribed in result['webhook_fields']['events'].items(): print(f" {event}: {subscribed}") ``` ## Response ```json 201 theme={null} { "webhook_fields": { "url": "https://your-webhook.com/endpoint", "is_active": true, "retry": false, "events": { "run.running": true, "run.paused": false, "run.done": false, "run.error": true } } } ``` # Create Squid Source: https://docs.lobstr.io/docs/create-squid POST https://api.lobstr.io/v1/squids Create a new squid container for a specific crawler to organize and run scraping tasks This endpoint creates a new squid for a specified crawler by providing the crawler's hash ID. A squid is a container that groups together related tasks and configurations for a specific scraping operation. ## What is a Squid? A squid acts as a project workspace for your scraping tasks: * **Groups tasks**: All URLs or items you want to scrape with the same crawler * **Stores configuration**: Crawler parameters, concurrency settings, delivery options * **Manages runs**: Tracks execution history and results * **Enables scheduling**: Set up automated recurring scrapes ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body The unique ID (hash) of the crawler to use for this squid. Example: `"4734d096159ef05210e0e1677e8be823"` Custom name for the squid. If not provided, an auto-generated name will be used. Example: `"My Google Maps Scraper"` ## Response Field Explanations Unique squid identifier. Example: `"c106a44a98044ef18acc59986ae10967"` Squid name (auto-generated as "Crawler Name (N)" if not provided). Example: `"Google Maps (1)"` ID of the associated crawler. Example: `"4734d096159ef05210e0e1677e8be823"` Whether the squid is active and can run. Example: `true` Number of concurrent tasks (default: 1). Example: `1` Squid-level parameters with default values from crawler. Example: `{}` Cron schedule configuration (null if not scheduled). Example: `null` Whether to stop after all tasks complete (false = run continuously). Example: `false` After creating a squid, you can update its parameters and settings using the Update Squid endpoint before adding tasks. The squid automatically inherits default parameters from the crawler. Check the response 'params' field to see what defaults were applied. Custom names help organize multiple squids using the same crawler. Without a custom name, squids are numbered sequentially. Make sure to get the crawler ID from the List Crawlers endpoint first. Using an invalid crawler ID will result in an error. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "crawler": "4734d096159ef05210e0e1677e8be823", "name": "My Google Maps Scraper" }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/squids" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "crawler": "4734d096159ef05210e0e1677e8be823", "name": "My Google Maps Scraper" } response = requests.post(url, headers=headers, json=payload) squid = response.json() print(f"Squid created successfully!") print(f"ID: {squid['id']}") print(f"Name: {squid['name']}") print(f"Crawler: {squid['crawler']}") print(f"Is Active: {squid['is_active']}") print(f"Concurrency: {squid['concurrency']}") print(f"\nDefault Parameters:") for key, value in squid['params'].items(): print(f" {key}: {value}") ``` ## Response ```json 201 theme={null} { "id": "e86b29c032024b66aff529e1d43c2bd7", "account": [], "concurrency": 1, "crawler": "4734d096159ef05210e0e1677e8be823", "created_at": "2025-02-03T14:24:23Z", "is_active": true, "name": "My Google Maps Scraper", "params": { "max_results": 200, "ratings": "Any rating", "country": "United States", "language": "English (United States)" }, "schedule": null, "to_complete": false } ``` # Delete Account Source: https://docs.lobstr.io/docs/delete-account DELETE https://api.lobstr.io/v1/accounts/{account_hash} Permanently remove a platform account from your Lobstr account This endpoint permanently removes a specific platform account using its hash ID. All associated cookies and configurations will be deleted. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the account to delete. Example: `d3e97f2cd33658f301bdbe807402ab30` ## Response Field Explanations The deleted account's identifier. Example: `"d3e97f2cd33658f301bdbe807402ab30"` Always "account". Example: `"account"` Confirmation of deletion. Always `true` on success. This action is permanent and cannot be undone. Make sure no active squids are using this account before deletion. Use Get Account Details first to check the squids array and see which squids depend on this account. Deleting an account does not affect your squids, but they will fail to run if they require this account for authentication. If you're experiencing cookie issues, use Refresh Cookies instead of deleting and re-creating the account. ## Code Examples ```bash cURL theme={null} curl -X DELETE "https://api.lobstr.io/v1/accounts/d3e97f2cd33658f301bdbe807402ab30" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests account_hash = "d3e97f2cd33658f301bdbe807402ab30" url = f"https://api.lobstr.io/v1/accounts/{account_hash}" headers = { "Authorization": "Token YOUR_API_KEY" } # First, check if any squids are using this account details_response = requests.get(url, headers=headers) account = details_response.json()['data'][0] if account['squids']: print("Warning: The following squids are using this account:") for squid in account['squids']: print(f" - {squid['name']}") print("\nDeleting will cause these squids to fail.") confirm = input("Continue? (y/n): ") if confirm.lower() != 'y': print("Cancelled.") exit() # Delete the account response = requests.delete(url, headers=headers) data = response.json() if data.get('deleted'): print(f"Account {data['id']} deleted successfully") else: print("Failed to delete account") ``` ## Response ```json 200 theme={null} { "id": "d3e97f2cd33658f301bdbe807402ab30", "object": "account", "deleted": true } ``` ```json 404 theme={null} { "detail": "Account not found." } ``` # Delete Squid Source: https://docs.lobstr.io/docs/delete-squid DELETE https://api.lobstr.io/v1/squids/{squid_hash} Permanently delete a squid and all its associated data from your account This endpoint permanently deletes a specified squid and all its associated data (tasks, results, and configurations) from lobstr.io. ## What Gets Deleted When you delete a squid, the following are permanently removed: * The squid itself and all its settings * All tasks (URLs and parameters) * All results and run history * All configuration (parameters, integrations, schedule) * Any pending or active runs ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the squid to delete. Example: `5b071952127e47d2adc8d684ff24dbd2` ## Response Field Explanations The deleted squid's identifier. Example: `"5b071952127e47d2adc8d684ff24dbd2"` Always "squid". Example: `"squid"` Boolean confirming deletion (always true on success). Example: `true` This action is permanent and cannot be undone. Make sure you've downloaded any important results before deleting. If you just want to pause a squid temporarily, set 'is\_active: false' using Update Squid instead of deleting it. Deleting a squid does not affect your credits or billing. Any credits spent on runs remain consumed. Use the Empty Squid endpoint if you want to clear tasks but keep the squid configuration for future use. If a run is currently active, the deletion will stop the run and then delete the squid. Any partial results will be lost. ## Code Examples ```bash cURL theme={null} curl -X DELETE "https://api.lobstr.io/v1/squids/5b071952127e47d2adc8d684ff24dbd2" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests squid_id = "5b071952127e47d2adc8d684ff24dbd2" url = f"https://api.lobstr.io/v1/squids/{squid_id}" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.delete(url, headers=headers) result = response.json() print(f"Squid deleted: {result['deleted']}") print(f"Squid ID: {result['id']}") print("All associated tasks, results, and configurations have been permanently removed.") ``` ## Response ```json 200 theme={null} { "id": "5b071952127e47d2adc8d684ff24dbd2", "object": "squid", "deleted": true } ``` # Delete Squid Chain Source: https://docs.lobstr.io/docs/delete-squid-chain DELETE https://api.lobstr.io/v1/squids/{id}/chain Remove the chain configuration from a squid Removes the chain configuration from a squid. The source and target squids themselves are not deleted — only the link between them. ## Path Parameters Hash ID of the source squid. Example: `"e86b29c032024b66aff529e1d43c2bd7"` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Code Examples ```bash cURL theme={null} curl -X DELETE "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" headers = {"Authorization": "Token YOUR_API_KEY"} response = requests.delete(url, headers=headers) # 204 No Content on success ``` ## Response ```json 204 theme={null} ``` ```json 404 theme={null} { "error": "No chain configured on this squid." } ``` # Delete Task Source: https://docs.lobstr.io/docs/delete-task DELETE https://api.lobstr.io/v1/tasks/{task_hash} Permanently delete a specific task from a squid This endpoint permanently deletes a specific task using its hash ID. The task and its associated data will be removed from the system. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the task to delete. Example: `c5e29d2aba8b77cdc56391e7405302de` ## Response Field Explanations The deleted task's identifier. Example: `"c5e29d2aba8b77cdc56391e7405302de"` Always "task". Example: `"task"` Confirmation of deletion (true on success). Example: `true` This action is permanent and cannot be undone. Task data and results will be lost. Use Get Task first to verify you're deleting the correct task. Deleting a task does not affect results that have already been exported or delivered. To remove all tasks from a squid, use the Empty Squid endpoint instead of deleting tasks one by one. ## Code Examples ```bash cURL theme={null} curl -X DELETE "https://api.lobstr.io/v1/tasks/c5e29d2aba8b77cdc56391e7405302de" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests task_hash = "c5e29d2aba8b77cdc56391e7405302de" url = f"https://api.lobstr.io/v1/tasks/{task_hash}" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.delete(url, headers=headers) result = response.json() if result['deleted']: print(f"Task {result['id']} deleted successfully") else: print("Failed to delete task") ``` ## Response ```json 200 theme={null} { "id": "c5e29d2aba8b77cdc56391e7405302de", "object": "task", "deleted": true } ``` ```json 404 theme={null} { "error": { "message": "Task not found", "type": "not_found_error", "param": "task_hash" } } ``` # Documentation MCP Source: https://docs.lobstr.io/docs/docs-mcp A public, no-auth MCP server that gives AI assistants semantic search and read access to the lobstr.io API documentation. To run scrapers in your account, see the MCP Server page instead. This server answers *"how does lobstr.io work?"* — it exposes the API documentation to AI assistants for semantic search and reading. It is read-only and unauthenticated; it cannot touch your account. Looking to **run scrapers** from Claude or ChatGPT — discover a scraper, configure it, run it, and pull results in the conversation? That's the operational [MCP Server](/docs/mcp), which connects to your account over OAuth. This page is only the documentation assistant. **Endpoint:** `https://docs.lobstr.io/mcp` Semantic search and full filesystem access to every docs page. Public endpoint — no API key needed to query the docs. HTTP + Server-Sent Events transport, compatible with all MCP clients. ## Setup ```bash Claude Code theme={null} claude mcp add lobstrio-docs \ --transport http \ https://docs.lobstr.io/mcp ``` ```json Claude Desktop theme={null} { "mcpServers": { "lobstrio-docs": { "type": "http", "url": "https://docs.lobstr.io/mcp" } } } ``` ```json Cursor (.cursor/mcp.json) theme={null} { "mcpServers": { "lobstrio-docs": { "type": "http", "url": "https://docs.lobstr.io/mcp" } } } ``` ```bash Any MCP Client theme={null} curl -X POST https://docs.lobstr.io/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "search_lobstr_io", "arguments": { "query": "create squid" } }, "id": 1 }' ``` ## Tools | Tool | Description | | - | - | | `search_lobstr_io` | Semantic search across all documentation — titles, descriptions, guides, and API references. | | `query_docs_filesystem_lobstr_io` | Read-only shell-like access to every docs page as `.mdx` files. Supports `cat`, `head`, `rg`, `tree`, `ls`, and more. | ## Example Prompts Once connected, ask your AI assistant: * *"How do I create a squid and start scraping Google Maps?"* * *"Show me the Python code for adding tasks to a scraper"* * *"What parameters does the LinkedIn Profile Scraper accept?"* * *"List all delivery configuration options (email, S3, webhook)"* * *"How do I handle rate limiting in the lobstr.io API?"* ## JSON-RPC Methods | Method | Description | | - | - | | `initialize` | Handshake — returns server info and capabilities | | `tools/list` | List all available tools with input schemas | | `tools/call` | Execute a tool with arguments | # Download Run Source: https://docs.lobstr.io/docs/download-run GET https://api.lobstr.io/v1/runs/{run_hash}/download Get a temporary download URL for run results This endpoint generates a temporary download URL for the results of a specific run. The URL provides direct access to the exported data file. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the run to download. Example: `300e9c5c127d421c90f431478d9a2cfb` ## Query Parameters Export file format. One of `csv`, `xlsx`, `json`, `jsonl`. Defaults to `csv` — omit this parameter to get CSV. Comma-separated list of result columns to include, e.g. `fields=name,url,email`. Omit to include all columns. Comma-separated list of result columns to exclude, e.g. `omit=raw_html`. Ignored if `fields` is also set. ## Response Field Explanations Temporary signed URL to download the results file, in the requested `file_format`. Example: `"https://s3.eu-west-1.amazonaws.com/api.lobstr.io/temporary/..."` Download URLs are temporary and expire after a short period. Generate a new URL if the link expires. The run must have export\_done: true before a download URL can be generated. For automated workflows, consider using delivery configurations (Email, S3, SFTP, Webhook) instead of manual downloads. Results are exported in CSV format by default. Pass `file_format` to get XLSX, JSON, or JSONL (newline-delimited JSON) instead. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/runs/300e9c5c127d421c90f431478d9a2cfb/download" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests run_hash = "300e9c5c127d421c90f431478d9a2cfb" url = f"https://api.lobstr.io/v1/runs/{run_hash}/download" headers = { "Authorization": "Token YOUR_API_KEY" } # Get the download URL response = requests.get(url, headers=headers) data = response.json() download_url = data['s3'] print(f"Download URL: {download_url}") # Download the file file_response = requests.get(download_url) with open("results.csv", "wb") as f: f.write(file_response.content) print("Results saved to results.csv") ``` ```bash cURL (JSON, selected columns) theme={null} curl -X GET "https://api.lobstr.io/v1/runs/300e9c5c127d421c90f431478d9a2cfb/download?file_format=json&fields=name,url,email" \ -H "Authorization: Token YOUR_API_KEY" ``` ## Response ```json 200 theme={null} { "s3": "https://s3.eu-west-1.amazonaws.com/api.lobstr.io/temporary/lobstrc106a44a98044ef18acc59986ae10967/eebce7802e7740979a0b8450de10c99e.csv?response-content-disposition=attachment%3B%20filename%3Dmy-cool-squid_20250305_0927.csv&AWSAccessKeyId=AKIA3X7XNQGAHJ4R5SEQ&Signature=9CB7fDmysbdySN9a%2F7b9DDa6zhg%3D&Expires=1741771664" } ``` ```json 404 theme={null} { "error": { "message": "Run not found or export not ready", "type": "not_found_error", "param": "run_hash" } } ``` # Empty Squid Source: https://docs.lobstr.io/docs/empty-squid POST https://api.lobstr.io/v1/squids/{squid_hash}/empty Remove all tasks and results from a squid while keeping its configuration intact This endpoint removes all tasks and their associated results from a specified squid, returning the number of deleted items while keeping the squid's configuration intact. ## What Gets Deleted Depending on the `type` parameter: * **url**: Removes all URL-based tasks and their results * **params**: Removes all parameter-based tasks and their results The squid itself remains with all its settings (name, parameters, integrations, schedule) preserved. This is useful when you want to: * Clear old tasks before adding new ones * Reset a squid without losing its configuration * Remove tasks that are no longer needed ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Path Parameters The unique identifier (hash) of the squid to empty. Example: `388d6d5e98134294ac612ec9f99dc5b1` ## Request Body Type of tasks to remove: 'url' for URL-based tasks or 'params' for parameter-based tasks. Example: `"url"` ## Response Field Explanations Squid identifier. Example: `"388d6d5e98134294ac612ec9f99dc5b1"` Always "squid". Example: `"squid"` Boolean indicating success. Example: `true` Number of tasks deleted. Example: `150` This action is irreversible. All tasks and results of the specified type will be permanently deleted. Use this before re-importing tasks to avoid duplicates. Empty the squid, then add fresh tasks. The squid's configuration (parameters, integrations, schedule) is preserved. Only tasks and results are removed. Check the 'deleted\_count' in the response to verify how many tasks were removed. If a run is currently active, stop it before emptying the squid to avoid conflicts. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/388d6d5e98134294ac612ec9f99dc5b1/empty" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "url" }' ``` ```python Python theme={null} import requests squid_id = "388d6d5e98134294ac612ec9f99dc5b1" url = f"https://api.lobstr.io/v1/squids/{squid_id}/empty" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "type": "url" # or "params" for parameter-based tasks } response = requests.post(url, headers=headers, json=payload) result = response.json() print(f"Squid emptied: {result['emptied']}") print(f"Tasks deleted: {result['deleted_count']}") print(f"Squid ID: {result['id']}") ``` ## Response ```json 200 theme={null} { "id": "388d6d5e98134294ac612ec9f99dc5b1", "object": "squid", "emptied": true, "deleted_count": 1 } ``` # Errors Source: https://docs.lobstr.io/docs/errors HTTP status codes and error types returned by the lobstr.io API The lobstr.io API uses standard HTTP status codes. All error responses share one envelope: an `errors` object with `message` (human-readable), `type` (the error code from the tables below), and `code` (the HTTP status, repeated). ```json theme={null} { "errors": { "message": "A required parameter squid is missing from the route.", "type": "ParamsNeeded", "code": 400 } } ``` ## HTTP status codes | Code | Meaning | | - | - | | `200` | Success | | `400` | Bad request — invalid parameters or business logic violation | | `401` | Unauthorized — missing or invalid API key | | `403` | Forbidden — authenticated but not permitted | | `404` | Not found — resource does not exist | | `429` | Too many requests — rate limit exceeded | | `500` | Server error — something went wrong on our end | *** ## Authentication errors (401) | Error | Description | | - | - | | `NotAuthenticated` | No API key provided or the key is invalid | | `TokenExpired` | The authentication token has expired | Make sure your `Authorization` header is formatted exactly as `Token YOUR_API_KEY`. *** ## Validation errors (400) These occur when required parameters are missing or have the wrong format. | Error | Description | | - | - | | `ParamsNeeded` | A required parameter is missing (e.g., `squid`, `tasks`) | | `MultipleParamsNeeded` | Multiple required parameters are missing | | `ParamsInvalid` | A parameter value is invalid | | `InvalidParamType` | A parameter has the wrong type (e.g., string where integer expected) | | `InvalidParameterValue` | A parameter value is out of the allowed range | | `BadEncoding` | File encoding could not be recognized (upload endpoints) | | `InvalidParam` | General invalid parameter error | *** ## Resource not found errors (404) | Error | Description | | - | - | | `SquidDoesNotExistException` | The specified squid does not exist or does not belong to you | | `RunDoesNotExist` | The specified run was not found | | `TaskDoesNotExist` | The specified task was not found | | `TasksNotFound` | No tasks found matching the criteria | | `ModuleNotFound` | The specified crawler does not exist | | `FunctionNotFound` | The specified crawler function does not exist | | `AccountDoesNotExist` | The specified account was not found | | `AccountTypeDoesNotExist` | The specified account type does not exist | *** ## Business logic errors (400) These occur when the request is valid but the operation can't proceed due to account state. | Error | Description | | - | - | | `NotEnoughBalance` | Insufficient credits to start the run | | `NoActiveSubscription` | Account has no active subscription | | `UsageLimitExceeded` | Plan usage limit has been reached | | `SlotsLimitExceeded` | Your plan's squid/slot allocation is exhausted (e.g. trying to create another squid with no free slots) — distinct from `ConcurrencyLimitExceeded` below, which is about a run's concurrency setting, not squid count | | `ConcurrencyLimitExceeded` | Requested concurrency exceeds plan limit | | `NoTasksPresent` | Squid has no active tasks to run | | `SquidNotReady` | Squid is not in a state that allows running | | `DuplicateSquid` | A squid with the same name already exists | | `PremiumModule` | This crawler requires a paid plan | | `ModuleUnavailable` | The crawler is temporarily unavailable | | `ModuleRestricted` | Access to this crawler is restricted | | `RunInProgress` | A run is already in progress for this squid | | `TaskNotValidError` | Task parameters do not match the crawler's requirements | | `FileSizeLimitExceeded` | Uploaded file exceeds the size limit | *** ## Run stop reasons When a run ends, the response includes a `done_reason` field (slug) and `done_reason_desc` (human-readable message) explaining why it stopped. These are not HTTP errors — they appear in the run object returned by [Get Run](/docs/get-run). ### Account errors These indicate a problem with the account attached to the squid. Re-sync or replace the account, then resume the run. | `done_reason` | Description | | - | - | | `no_accounts` | No accounts are linked to this squid — the run closes permanently. Fix: attach an account. | | `no_account_available` | Accounts are linked but all are currently in use by other runs — the run pauses and resumes automatically once one is free. | | `account_blocked` | The account has been blocked by the platform | | `account_too_many_requests` | The platform rate-limited the account | | `cookies_expired` | Account cookies have expired — re-sync required | | `wrong_credentials` | Account credentials are incorrect | | `logged_out` | The account has been logged out | | `checkpoint_reached` | The account is blocked on a checkpoint | | `challenge_required` | The platform is asking for a challenge | | `non_premium` | A premium platform account is required | | `sales_seat_required` | A Sales Navigator seat is required for this account | | `limit_exceeded` | The account has reached its platform usage limit | ### General stop reasons | `done_reason` | Description | | - | - | | `tasks_done` | All tasks completed successfully | | `no_credits_left` | Account ran out of lobstr.io credits | | `deactivated` | Run was deactivated | | `website_inaccessible` | Target website blocked requests (403/429) or is down (5xx) — run paused 10 minutes, then resumes | | `premium_plan_needed` | A premium plan is required to run this module | | `module_under_maintenance` | Module is temporarily under maintenance | | `request_failed` | A request failed — run paused for 6 hours | | `export_failed` | Results export failed | | `last_invoice_not_paid` | Last invoice is unpaid | | `maintenance_fees_not_paid` | Custom module maintenance fees are unpaid | | `batch_wait` | Current batch processed — waiting for timeout | | `emails_verified` | All emails have been verified | *** ## Rate limiting (429) Requests that exceed your plan's rate limit return a `429` response, in the same `errors` envelope as every other error: ```json theme={null} { "errors": { "message": "Request was throttled. Expected available in 2 seconds.", "type": "...", "code": 429 } } ``` *** ## Server errors (500) | Error | Description | | - | - | | `SomethingWentWrong` | An unexpected server-side error occurred | If you encounter repeated 500 errors, contact support with the request details. *** ## Error handling example ```python Python theme={null} import requests def api_request(method, url, **kwargs): response = requests.request(method, url, **kwargs) if response.status_code == 401: raise Exception("Authentication failed — check your API key") if response.status_code == 404: message = response.json().get("errors", {}).get("message", "Resource not found") raise Exception(f"Not found: {message}") if response.status_code == 400: message = response.json().get("errors", {}).get("message", "Bad request") raise Exception(f"Bad request: {message}") if response.status_code == 429: raise Exception("Rate limit exceeded — slow down requests") if response.status_code >= 500: raise Exception("Server error — try again later") response.raise_for_status() return response.json() ``` # Get Account Details Source: https://docs.lobstr.io/docs/get-account-details GET https://api.lobstr.io/v1/accounts/{account_hash} Retrieve detailed information about a specific platform account This endpoint retrieves detailed information about a specific platform account using its hash ID. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the account. Example: `d3e97f2cd33658f301bdbe807402ab30` ## Response Field Explanations Unique account identifier. Example: `"d3e97f2cd33658f301bdbe807402ab30"` Always "account". Example: `"account"` Platform username. Example: `"hashamxcom"` Account creation timestamp (ISO 8601). Example: `"2024-03-08T15:15:53Z"` Last successful sync timestamp. Example: `"2024-12-16T10:28:43Z"` HTTP status code indicating account health. Example: `"200"` Status information keyword. Example: `"synchronized"` Human-readable status message. Example: `"Success!"` Account type identifier. Example: `"twitter-sync"` Account parameters with default and user-specific settings. Example: `{"default": {}, "user": {}}` Last update timestamp. Example: `null` Reference to account type definition. Example: `"9853173fc00a940a33d7a420c176ad3b"` Array of squids currently using this account. Example: `[{"name": "Twitter Scraper", "hash_value": "fcd3..."}]` Platform base URL. Example: `"https://x.com"` Required cookie specifications. Example: `[{"name": "auth_token", "required": true}]` Base64 encoded platform icon. Example: `""` Check the squids array to see which squids are using this account before deleting or updating it. Monitor the status field regularly. A status of 429 or 401 indicates cookie expiration and requires re-synchronization. The params object contains both default limits and current user-configured values, useful for understanding account usage. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/accounts/d3e97f2cd33658f301bdbe807402ab30" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests account_hash = "d3e97f2cd33658f301bdbe807402ab30" url = f"https://api.lobstr.io/v1/accounts/{account_hash}" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) data = response.json() account = data['data'][0] print(f"Account: {account['username']}") print(f"Platform: {account['type']}") print(f"Status: {account['status_code_info']}") print(f"Last sync: {account['last_synchronization_time']}") # Check which squids use this account if account['squids']: print(f"\nSquids using this account:") for squid in account['squids']: print(f" - {squid['name']} ({squid['hash_value']})") else: print("\nNo squids using this account") ``` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 2, "data": [ { "id": "d3e97f2cd33658f301bdbe807402ab30", "object": "account", "username": "hashamxcom", "created_at": "2024-03-08T15:15:53Z", "last_synchronization_time": "2024-12-16T10:28:43Z", "status": "200", "status_code_info": "synchronized", "status_code_description": "Success!", "type": "twitter-sync", "params": { "default": {}, "user": {} }, "updated_at": null, "account_type_hash": "9853173fc00a940a33d7a420c176ad3b", "squids": [ { "name": "Twitter User Tweets Scraper (2)", "hash_value": "fcd3fff4053e444b8a98b3660bee8b03" } ], "baseurl": "https://x.com", "cookies": [ {"name": "auth_token", "required": true}, {"name": "ct0", "required": true} ], "icon": "" } ], "next": null, "previous": null } ``` ```json 401 theme={null} { "detail": "Invalid token." } ``` ```json 404 theme={null} { "detail": "Not found." } ``` # Get Balance Source: https://docs.lobstr.io/docs/get-balance GET https://api.lobstr.io/v1/user/balance Check your account balance and available credits before launching operations This endpoint returns your current account balance and credit information. Use it to check available credits before launching expensive scraping operations or to monitor your spending. It's recommended to check your balance before starting large-scale data collection tasks to ensure you have sufficient credits. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Content type of the request. Value: `application/json` ## Response Field Explanations The plan's price identifier. Example: `"price_abc123"` Always `"plan"`. Name of the active subscription plan. Example: `"Professional"` Total credits on the plan (including bonus). For daily-interval plans, this is the daily allowance. Example: `10000` Credits consumed in the current billing period. Example: `1550` Bonus credits applied to the account. Example: `0` Unused credits rolled over from a previous period. Example: `200` Timestamp when rollover credits expire, or `null` if none. Example: `null` Bonus credits earned through Community Story Rewards. Example: `500` Timestamp when community reward credits expire, or `null` if none. Example: `null` Credit reset interval (`"monthly"` or `"daily"`). Example: `"monthly"` Number of concurrency slots currently in use. Example: `3` Total concurrency slots available on the plan. Example: `20` Timestamp until which the account's export cap is lifted, or `null` when no lift is active. Example: `null` Outstanding unpaid invoice info. Empty object (`{}`) when there is no unpaid bill — despite the name, this is not a boolean. When a bill is outstanding it carries `status` (boolean) and `created_on` (Unix timestamp). Example: `{"status": true, "created_on": 1777545119}` Timestamp when credits will next reset. Example: `"2025-02-01T00:00:00Z"` Check your balance before launching expensive operations to avoid running out of credits mid-task. Large scraping jobs can consume significant credits. Balance information is updated in real-time. Each successful API response reflects your current credit balance. If your balance reaches zero, ongoing operations will be paused until you add more credits. Plan ahead to avoid service interruptions. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/user/balance" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```python Python theme={null} import requests headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", } response = requests.get( "https://api.lobstr.io/v1/user/balance", headers=headers ) balance_data = response.json() print(f"Plan: {balance_data['name']}") print(f"Total credits: {balance_data['available']}") print(f"Consumed: {balance_data['consumed']}") print(f"Remaining: {balance_data['available'] - balance_data['consumed']}") print(f"Slots used: {balance_data['used_slots']} / {balance_data['total_available_slots']}") ``` ## Response ```json 200 theme={null} { "id": "price_abc123", "object": "plan", "name": "Professional", "available": 10000, "consumed": 1550, "bonus_credit": 0, "rollover_credit": 200, "rollover_credit_expires_at": null, "community_reward_credit": 500, "community_reward_credit_expires_at": null, "export_cap_lifted_until": null, "interval": "monthly", "used_slots": 3, "total_available_slots": 20, "has_unpaid_bill": {}, "reset_time": "2025-02-01T00:00:00Z" } ``` # Get Crawler Attributes Source: https://docs.lobstr.io/docs/get-crawler-attributes GET https://api.lobstr.io/v1/crawlers/{crawler_hash}/attributes Retrieve the list of output attributes (result fields) for a specific crawler This endpoint returns all output attributes (result fields) for a specific crawler. Each attribute describes a field that may appear in your scraping results, along with its data type, an example value, and the function it belongs to. This is useful for understanding the shape of data a crawler produces before you start scraping, or for building dynamic result parsers. ### Attribute Fields The field name as it appears in result objects. Example: `"name"` Data type of the field (string, integer, float, boolean, text, json). Example: `"string"` Example value for the field. May be null for optional fields. Example: `"Blues Billard Club"` The crawler function this attribute belongs to. Example: `"Export Local Businesses"` Whether this attribute is included by default (true) or requires enabling a function (false). Example: `true` Human-readable description of what this field contains. Example: `"Business name as listed on Google Maps"` ## Main vs Function Attributes Attributes are divided into two categories: * **Main attributes** (`is_main: true`): Always included in results by default. * **Function attributes** (`is_main: false`): Only included when their parent function is enabled on your squid (e.g., "Collect Business Details", "Extract Emails from Website"). ## Headers Content type of the request. Value: `application/json` ## Query Parameters The unique identifier (hash/id) of the crawler. Example: `4734d096159ef05210e0e1677e8be823` This is a public endpoint — no authentication is required. Attributes with is\_main: false only appear in results when their parent function is enabled on your squid. Check the function field to see which add-on controls each attribute. Use the type field to build typed parsers for your results. Supported types are: string, integer, float, boolean, text (long string), and json (structured data). Combine this endpoint with Get Crawler Parameters to fully understand both the inputs and outputs of any crawler before integrating it. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/crawlers/4734d096159ef05210e0e1677e8be823/attributes" ``` ```python Python theme={null} import requests crawler_id = "4734d096159ef05210e0e1677e8be823" url = f"https://api.lobstr.io/v1/crawlers/{crawler_id}/attributes" response = requests.get(url) attributes = response.json() # Display all attributes grouped by function functions = {} for attr in attributes['data']: func = attr['function'] if func not in functions: functions[func] = [] functions[func].append(attr) for func_name, attrs in functions.items(): print(f"\n=== {func_name} ===") for attr in attrs: main_tag = " [main]" if attr['is_main'] else " [optional]" example = f" (e.g. {attr['example']})" if attr['example'] is not None else "" print(f" {attr['name']} ({attr['type']}){main_tag}{example}") print(f" {attr['description']}") ``` ## Response ```json 200 theme={null} { "data": [ { "name": "match_filters", "type": "boolean", "example": false, "function": "Export Local Businesses", "is_main": true, "description": "Whether the result passed your geo and category filters" }, { "name": "name", "type": "string", "example": "Blues Billard Club", "function": "Export Local Businesses", "is_main": true, "description": "Business name as listed on Google Maps" }, { "name": "address", "type": "string", "example": "06110 Le Cannet, France", "function": "Export Local Businesses", "is_main": true, "description": "Full formatted address of the business" }, { "name": "phone", "type": "string", "example": "+33493611118", "function": "Export Local Businesses", "is_main": true, "description": "Primary phone number of the business" }, { "name": "website", "type": "string", "example": "http://www.example.com/", "function": "Export Local Businesses", "is_main": true, "description": "Business website URL" }, { "name": "score", "type": "float", "example": 3.5, "function": "Export Local Businesses", "is_main": true, "description": "Average star rating out of 5" }, { "name": "category", "type": "text", "example": "Fishing charter", "function": "Export Local Businesses", "is_main": true, "description": "Primary business category on Google Maps" }, { "name": "email", "type": "string", "example": "info@lobstr.io", "function": "Extract Emails from Website", "is_main": false, "description": "Email address found on the business website" }, { "name": "email_status", "type": "string", "example": "valid", "function": "Extract Emails from Website", "is_main": false, "description": "Validation status of the extracted email address" } ] } ``` # Get Crawler Details Source: https://docs.lobstr.io/docs/get-crawler-details GET https://api.lobstr.io/v1/crawlers/{crawler_hash} Retrieve detailed information about a specific crawler including input parameters and output fields This endpoint retrieves detailed information about a specific crawler using its hash ID. It helps you understand each crawler's availability, cost, parameters, and potential issues before using it. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Content type of the request. Value: `application/json` ## Path Parameters The unique identifier (hash/id) of the crawler. Example: `4734d096159ef05210e0e1677e8be823` ## Response Field Explanations Unique identifier for the crawler. Example: `"c106a44a98044ef18acc59986ae10967"` Human-readable name (e.g., "Google Maps Search Export"). Example: `"Google Maps (1)"` URL-friendly identifier. Example: `"google-maps-leads-scraper"` What the crawler collects, as shown in the store. Example: `"Give us your properly built Google Maps Search URL(s). Grab all results available. Phone, rating, website included!"` Link to the crawler's help article, or `null` when it has none. Example: `null` Position in the public store listing. `null` for crawlers that are not ranked. Example: `1` Whether the crawler is publicly accessible. Example: `true` Whether the crawler is available for runs (false if paused). Example: `true` Requires premium subscription or extra credits. Example: `false` Currently experiencing issues (runs paused until fixed). Example: `false` Required account sync details (null if no authentication needed). Example: `null` Array of configurable parameters (task-level and squid-level). Example: `[]` Array of output field names this crawler collects. Example: `[]` Maximum number of workers that can run this crawler in parallel. Example: `20` Credits charged per result row, keyed by plan type: `current` is the rate on today's plans, `legacy` the rate kept by grandfathered subscriptions. Example: `{"legacy": 1, "current": 1}` Credits charged per email found, keyed the same way as `credits_per_row`. Only meaningful for crawlers with an email enrichment function. Example: `{"legacy": 100, "current": 2}` Whether this crawler can verify the email addresses it finds. Example: `true` Throughput profile of the crawler's default worker — `success_ratio`, `min_rate_per_worker`, and `max_rate_per_worker`. Used to project how long a run will take. `null` when no profile is published. Example: `{"success_ratio": 1, "max_rate_per_worker": 200, "min_rate_per_worker": 100}` Same throughput profile for the email enrichment worker, which is typically slower and has a lower success ratio. `null` when the crawler has no email function. Example: `{"success_ratio": 0.3, "max_rate_per_worker": 30, "min_rate_per_worker": 20}` Crawlers this one can chain into — each entry describes the target crawler, how its fields map from this crawler's output (`field_map`), whether it autostarts by default, and the squid-level parameters it accepts. Empty when the crawler supports no chaining. See [Configure Chain](/examples/google-maps-leads-scraper/configure-chain) for a worked example. ## Understanding Input Parameters Parameter level: "task" (per URL/task) or "squid" (overall run behavior). Example: `""` For task-level: true indicates this parameter is used per task submission. Example: `""` For squid-level: true indicates this controls overall behavior or features. Example: `""` If true, this is an optional add-on feature with extra credit costs. Example: `""` Extra credits charged per row when this optional function is enabled. Example: `""` Parameter name to use when configuring the crawler. Example: `"Google Maps (1)"` Data type of the parameter (string, int, boolean, etc.). Example: `""` Whether this parameter is mandatory. Example: `""` Default value if parameter is not provided. Example: `""` Check the 'has\_issues' flag before creating tasks. If true, the crawler is experiencing problems and runs are paused. Parameters with 'function: true' are optional add-ons that cost extra credits per row (specified in 'credits\_per\_function'). Some crawlers require account synchronization (see 'account' field). You'll need to sync cookies before running these crawlers. Use the 'result' array to know exactly what fields will be returned in your data. This helps you plan your data processing pipeline. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/crawlers/4734d096159ef05210e0e1677e8be823" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests crawler_id = "4734d096159ef05210e0e1677e8be823" url = f"https://api.lobstr.io/v1/crawlers/{crawler_id}" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) crawler = response.json() print(f"Crawler: {crawler['name']}") print(f"Status: {'Available' if crawler['is_available'] else 'Unavailable'}") print(f"Has Issues: {crawler['has_issues']}") # credits_per_row is keyed by plan type — use "current" unless you're on a # grandfathered plan, in which case use "legacy". print(f"Credits per row: {crawler['credits_per_row']['current']}\n") # Display task-level inputs print("Task-level parameters:") task_inputs = [i for i in crawler['input'] if i['level'] == 'task'] for param in task_inputs: req = "Required" if param['required'] else "Optional" print(f" - {param['name']} ({param['type']}) - {req}") # Display squid-level inputs with functions print("\nSquid-level parameters:") squid_inputs = [i for i in crawler['input'] if i['level'] == 'squid'] for param in squid_inputs: cost = f" (+{param['credits_per_function']} credits)" if param.get('function') else "" print(f" - {param['name']}{cost}") # Display output fields print(f"\nOutput fields ({len(crawler['result'])} total):") print(", ".join(crawler['result'][:10]) + "...") ``` ## Response ```json 200 theme={null} { "id": "4734d096159ef05210e0e1677e8be823", "object": "crawler", "account": null, "name": "Google Maps Leads Scraper", "slug": "google-maps-leads-scraper", "description": "Give us your properly built Google Maps Search URL(s). Grab all results available. Phone, rating, website included!", "help_article": null, "rank": 1, "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9zdmc+", "is_public": true, "is_available": true, "is_premium": false, "has_issues": false, "input": [ { "name": "url", "type": "string", "level": "task", "regex": "http(.*)google(.*)/maps/(search|place)(.*)", "default": null, "example": "https://www.google.com/maps/search/restaurant/@43.2928346,5.3662584,14z", "required": false, "is_details": false, "description": "A string representing the Google Maps Search URL, containing all establishments the crawler will collect." }, { "name": "activity", "type": "string", "level": "task", "value": "restaurant", "example": "restaurant", "required": false, "is_params": true, "description": "The activity of the search location." }, { "max": 200, "name": "max_results", "type": "int", "level": "squid", "default": 200, "example": 200, "required": false, "is_details": true, "description": "Google Maps restricts search results to a maximum of 200. To access a larger dataset, consider utilizing our URL generator." }, { "name": "extract_emails_from_website", "type": "boolean", "level": "squid", "default": true, "display": "Extract Emails From Website", "function": true, "priority": 3, "required": false, "is_details": true, "description": "Extract email addresses from the business's website.", "credits_per_function": 10 }, { "name": "collect_business_details", "type": "boolean", "level": "squid", "default": false, "display": "Collect Business Details", "function": true, "priority": 1, "required": false, "is_details": true, "description": "Extract attributes like plus_code, poi, health, and last_opening_hours_updated_at.", "credits_per_function": 10 } ], "result": [ "zero_x", "cid", "url", "name", "address", "country_name", "country_code", "zip_code", "city", "lat", "lng", "ratings", "score", "category", "main_image_url", "phone", "website", "menu", "plus_code", "is_temporarily_closed", "is_permanently_closed", "has_owner", "opening_hours", "email", "facebook", "instagram" ], "max_concurrency": 20, "credits_per_row": { "legacy": 1, "current": 1 }, "credits_per_email": { "legacy": 100, "current": 2 }, "has_email_verification": true, "default_worker_stats": { "success_ratio": 1, "max_rate_per_worker": 200, "min_rate_per_worker": 100 }, "email_worker_stats": { "success_ratio": 0.3, "max_rate_per_worker": 30, "min_rate_per_worker": 20 }, "chains": [ { "title": "Google Maps Reviews Scraper", "subtitle": "Collect all reviews from a GoogleMaps Etablishment URL!", "target": "googlemapreviews_matrix", "target_module_id": "e625ce52e98a6d4d1b53ef36dff7dacb", "field_map": { "url": "url" }, "autostart_default": true } ] } ``` The `input` and `result` arrays above are abridged. At the time of writing this crawler exposes 25 input parameters and 87 result fields — always read them from the live response rather than hard-coding them. # Get Crawler Parameters Source: https://docs.lobstr.io/docs/get-crawler-parameters GET https://api.lobstr.io/v1/crawlers/{crawler_hash}/params Retrieve the list of configurable input parameters for a specific crawler This endpoint returns all configurable input parameters for a specific crawler. The response is organized into two main sections: `task` and `squid`. ## Response Structure The response contains: * **task**: Object containing task-level parameters (parameter name as key) * **squid**: Object containing squid-level parameters and functions * **squid.functions**: Optional add-on features with extra credit costs ### Task-level Parameter Fields Data type (string, int, boolean, etc.). Example: `"string"` Logical grouping (e.g., "url", "location"). Example: `"url"` Validation pattern for string inputs. Example: `"^https?://.*"` Whether the parameter is mandatory. Example: `true` Default value if not provided. Example: `null` Internal attribute name. Example: `"url"` Whether it's used for URL parameter generation. Example: `true` ### Squid-level Parameter Fields Data type of the parameter. Example: `"string"` Array of valid values (for enum types). Example: `["en", "es", "fr"]` Default value if not provided. Example: `"en"` Whether the parameter is mandatory. Example: `false` Internal attribute name. Example: `"language"` ### Functions (Optional Add-ons) Fields Display order of the function. Example: `1` Whether the function is enabled by default. Example: `false` Extra credits charged per row when this function is enabled. Example: `0.5` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Content type of the request. Value: `application/json` ## Path Parameters The unique identifier (hash/id) of the crawler. Example: `4734d096159ef05210e0e1677e8be823` The response structure uses parameter names as object keys. Access task parameters via params.task.url, squid parameters via params.squid.language, etc. Functions under squid.functions are optional add-ons. Each function has a credits\_per\_function cost applied per result row when enabled. Pay attention to 'allowed' arrays in squid parameters - these only accept specific values. Sending invalid values will cause validation errors. Use 'regex' patterns in task parameters to validate input before sending. This helps catch errors early and reduces failed tasks. Parameters with 'group' field are logically related. For location-based crawlers, you'll typically need to provide all parameters in the 'location' group. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/crawlers/4734d096159ef05210e0e1677e8be823/params" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests crawler_id = "4734d096159ef05210e0e1677e8be823" url = f"https://api.lobstr.io/v1/crawlers/{crawler_id}/params" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) params = response.json() # Display task-level parameters print("=== Task-level Parameters ===") for param_name, param_config in params['task'].items(): req = " (Required)" if param_config['required'] else " (Optional)" print(f"\n{param_name} ({param_config['type']}){req}") if param_config.get('regex'): print(f" Validation: {param_config['regex']}") if param_config.get('default') is not None: print(f" Default: {param_config['default']}") print(f" Group: {param_config.get('group', 'N/A')}") # Display squid-level parameters print("\n=== Squid-level Parameters ===") squid_params = {k: v for k, v in params['squid'].items() if k != 'functions'} for param_name, param_config in squid_params.items(): req = " (Required)" if param_config['required'] else " (Optional)" print(f"\n{param_name} ({param_config['type']}){req}") if param_config.get('allowed'): print(f" Allowed values: {len(param_config['allowed'])} options") print(f" Default: {param_config['default']}") # Display optional functions (add-ons with extra costs) if 'functions' in params['squid']: print("\n=== Optional Functions (Extra Credits) ===") for func_name, func_config in params['squid']['functions'].items(): enabled = " (Enabled by default)" if func_config['default'] else "" print(f"\n{func_name}{enabled}") print(f" Credits per function: {func_config['credits_per_function']}") print(f" Sort order: {func_config['sort']}") ``` ## Response ```json 200 theme={null} { "task": { "url": { "type": "string", "group": "url", "regex": "http(.*)google(.*)/maps/(search|place)(.*)", "default": null, "required": true, "attribute": "url", "is_params": false }, "city": { "type": "string", "group": "location", "default": null, "required": true, "attribute": "city", "is_params": true }, "region": { "type": "string", "group": "location", "default": null, "required": false, "attribute": "region", "is_params": true }, "country": { "type": "string", "group": "location", "default": null, "required": true, "attribute": "country", "is_params": true }, "category": { "type": "string", "group": "location", "default": null, "required": true, "attribute": "category", "is_params": true }, "district": { "type": "string", "group": "location", "default": null, "required": false, "attribute": "district", "is_params": true } }, "squid": { "country": { "type": "string", "allowed": [ "Afghanistan", "Albania", "Algeria", "United States", "United Kingdom", "France", "Germany", "Japan", "Brazil" ], "default": "United States", "required": false, "attribute": "country", "is_params": false }, "ratings": { "type": "string", "allowed": [ "Any rating", "2.0+", "2.5+", "3.0+", "3.5+", "4.0+", "4.5+" ], "default": "Any rating", "required": false, "attribute": "ratings", "is_params": false }, "language": { "type": "string", "allowed": [ "Afrikaans", "English (United States)", "Español (España)", "Français (France)", "Deutsch (Deutschland)", "Italiano", "Português (Brasil)", "日本語", "简体中文", "繁體中文" ], "default": "English (United States)", "required": true, "attribute": "language", "is_params": false }, "functions": { "fetch_business_images": { "sort": 1, "default": false, "credits_per_function": 10 }, "collect_business_details": { "sort": 0, "default": false, "credits_per_function": 10 }, "extract_emails_from_website": { "sort": 2, "default": true, "credits_per_function": 10 } } } } ``` # Get Results Source: https://docs.lobstr.io/docs/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from a squid or specific run This endpoint retrieves a paginated list of results (scraped data) produced by a squid. You can query results for an entire squid or filter to a specific run and/or task. **Important:** You must supply either the `squid` hash OR a specific `run` hash — not both. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters | Parameter | Type | Required | Description | | - | - | - | - | | **squid** | string | One of\* | Hash of the squid. Returns all results across all runs if `run` is omitted | | **run** | string | One of\* | Hash of the run. Returns results from that single execution only | | **task** | string | No | Hash of a specific task. Filters results to just that task | | **page** | integer | No | Page number to fetch (1-indexed). Default: 1 | | **page\_size** | integer | No | Number of results per page. Default: 10, Max: 100 | ## Response Field Explanations Total number of result records available. Example: `156` Number of results per page (matches the `page_size` param). Example: `50` Current page number. Example: `1` Total number of pages available. Example: `4` 1-based index of the first record in this page. Example: `1` 1-based index of the last record in this page. Example: `50` Full URL to fetch the next page (null if last page). Example: `"https://api.lobstr.io/v1/results?squid=...&page=2"` Full URL to fetch the previous page (null if first page). Example: `null` Array of result objects. Schema varies by crawler type. Example: `[...]` Unique result identifier. Example: `"b4af52b85c45661828d61980c167054b"` Always "result". Example: `"result"` Squid that produced this result. Example: `"b6c56d18cb0046949461ba9ca278e8ad"` Run that produced this result. Example: `"300e9c5c127d421c90f431478d9a2cfb"` When this result was scraped (ISO 8601). Example: `"2025-02-10T14:31:05.487Z"` ## Result Data Schema The fields within each result object depend on the crawler used. For example, a Google Maps crawler returns fields like `name`, `address`, `phone`, `website`, `ratings`, `score`, etc., while a LinkedIn crawler returns different fields. Use the Get Crawler Details endpoint to understand what fields your specific crawler returns. Use the `next` URL to automatically paginate through all results until it returns null. Result schemas vary by crawler. The fields returned depend on what data the crawler extracts. You must provide either `squid` OR `run` — providing both or neither will result in an error. For large result sets, increase page\_size to 100 to reduce the number of API calls needed. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/results?squid=b6c56d18cb0046949461ba9ca278e8ad&page=1&page_size=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/results" headers = { "Authorization": "Token YOUR_API_KEY" } params = { "squid": "b6c56d18cb0046949461ba9ca278e8ad", # OR use "run": "run_hash" to get results from a specific run "page": 1, "page_size": 50 } # Fetch all results with pagination all_results = [] while True: response = requests.get(url, headers=headers, params=params) data = response.json() all_results.extend(data['data']) print(f"Fetched page {data['page']} of {data['total_pages']}") if data['next'] is None: break # Use the next URL directly for subsequent requests url = data['next'] params = {} # Clear params as they're in the URL print(f"\nTotal results collected: {len(all_results)}") # Process results for result in all_results[:5]: # Show first 5 print(f"- {result.get('name', 'N/A')}: {result.get('address', 'N/A')}") ``` ## Response ```json 200 theme={null} { "total_results": 156, "limit": 50, "page": 1, "total_pages": 4, "result_from": 1, "result_to": 50, "data": [ { "id": "b4af52b85c45661828d61980c167054b", "object": "result", "squid": "b6c56d18cb0046949461ba9ca278e8ad", "run": "300e9c5c127d421c90f431478d9a2cfb", "name": "1860 Le Palais", "address": "9 La Canebière Vieux Port, 13001 Marseille, France", "phone": "+33491995484", "website": "https://www.1860lepalais.fr/", "category": "French restaurant, Brunch restaurant, Mediterranean restaurant", "score": 4.4, "ratings": 1220, "lat": 43.2960548, "lng": 5.3751573, "city": "Marseille", "country": "France", "zip_code": "13001", "opening_hours": "Monday 9 AM–10:30 PM, Tuesday 9 AM–10:30 PM...", "scraping_time": "2025-02-10T14:31:05.487Z" }, { "id": "ec2348622e01fa0ed43e7c73b43665a1", "object": "result", "squid": "b6c56d18cb0046949461ba9ca278e8ad", "run": "300e9c5c127d421c90f431478d9a2cfb", "name": "Wood la cantine gourmande", "address": "8 Rue de la Guirlande, 13002 Marseille, France", "phone": "+33491919342", "website": "https://woodlacantinegourmande.fr/", "category": "French restaurant, Mediterranean restaurant", "score": 4.7, "ratings": 726, "lat": 43.296790699999995, "lng": 5.3704969, "city": "Marseille", "country": "France", "zip_code": "13002", "scraping_time": "2025-02-10T14:31:06.104Z" } ], "next": "https://api.lobstr.io/v1/results?squid=b6c56d18cb0046949461ba9ca278e8ad&page=2&page_size=50", "previous": null } ``` ```json 400 theme={null} { "error": { "message": "You must provide either 'squid' or 'run' parameter, not both or neither", "type": "validation_error", "param": "squid,run" } } ``` # Get Run Source: https://docs.lobstr.io/docs/get-run GET https://api.lobstr.io/v1/runs/{run_hash} Retrieve detailed information about a specific run This endpoint retrieves detailed information about a specific run using its hash ID. A run represents an execution instance of a squid's tasks, tracking progress, status, and results. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the run. Example: `0393be3ea6f74986906153df1c3f9894` ## Response Field Explanations Unique identifier of the squid run. Example: `"0393be3ea6f74986906153df1c3f9894"` Type of returned object (always "run"). Example: `"run"` Date and time when the run was initially created (ISO 8601). Example: `"2025-02-04T10:26:50.847633"` Date and time when the scraping run started executing. Example: `"2025-02-04T10:25:41.623683"` Date and time when the scraping run completed or stopped. Example: `"2025-02-04T10:26:52.222239"` Duration of the scraping run in seconds. Example: `50.1833` Total credits consumed during the run. Example: `50.1833` Origin of the run initiation (e.g., "user", "schedule"). Example: `"user"` Current status of the squid run (see statuses table). Example: `"done"` Total number of results collected. Example: `40` Number of unique results collected. Example: `40` Indicates if the export was successfully generated. Example: `true` Date and time when export was generated. Example: `"2025-02-04T10:26:53.780636"` Reason indicating why the run finished (see done reasons table). Example: `"tasks_done"` Additional description providing context for done\_reason. Example: `null` Identifier of the squid this run belongs to. Example: `"e445405ef4ab41208ef7d29b92a1a9dd"` Scheduled date/time for the next execution (if recurring). Example: `null` Whether this run was force-launched. Example: `false` Number of times results have been exported. Example: `1` Whether the email delivery was completed. Example: `false`. Note: this specific endpoint names the field `mail_done`/`mail_time` — [List Runs](/docs/list-runs) and [Start Run](/docs/start-run) return the same data as `email_done`/`email_time` instead. Timestamp when email delivery completed. Example: `null` Email verification status for delivery. Example: `null` This endpoint does not return an `is_done` field. Use [Get Run Stats](/docs/get-run-stats) if you need a live `is_done` flag while a run is in progress. ## Run Statuses | Status | Phase | Description | | - | - | - | | **PENDING** | Waiting | Run is created and waiting to start execution | | **RUNNING** | In Progress | Run is currently collecting data | | **UPLOADING** | In Progress | Data collection is complete, now uploading/exporting results | | **PAUSED** | In Progress | Run has been temporarily paused; it can resume or be aborted | | **ABORTED** | Completed | Run was manually stopped before completion | | **DONE** | Completed | Run finished all tasks and exported the results successfully | | **ERROR** | Completed | Run failed due to an error | ## Done Reasons | Reason | Description | | - | - | | **tasks\_done** | All assigned tasks completed successfully | | **aborted** | Scraping run manually aborted by user | | **no\_credits\_left** | No credits remaining | | **no\_account\_available** | No available accounts; refresh required | | **no\_accounts** | No scraper-linked accounts available to initiate run | | **cookies\_expired** | Scraper-linked account cookies expired; renewal required | | **wrong\_credentials** | Account credentials invalid | | **checkpoint\_reached** | Account is blocked at a checkpoint (manual verification required) | | **otp\_needed** | OTP verification required; please re-sync accounts | | **limit\_exceeded** | Scraper-linked account limit exceeded | | **slots\_limit\_exceeded** | Scraping slots limit exceeded | | **too\_many\_requests** | Run stopped due to excessive requests | | **batch\_wait** | Current batch completed; awaiting timeout | | **deactivated** | Run has been deactivated | | **maintenance\_fees\_not\_paid** | Maintenance fees for this custom module have not been paid | | **last\_invoice\_not\_paid** | Previous invoice payment pending | | **export\_fix** | Export regenerated successfully after previous failure | Use the status field to track run progress. Poll this endpoint periodically for long-running scrapes. The done\_reason field provides insight into why a run ended - useful for debugging failed runs. Runs with status 'error' or unexpected done\_reasons may indicate account issues that need attention. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/runs/0393be3ea6f74986906153df1c3f9894" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/runs/0393be3ea6f74986906153df1c3f9894" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) run = response.json() print(f"Run ID: {run['id']}") print(f"Status: {run['status']}") print(f"Started: {run['started_at']}") print(f"Duration: {run['duration']}") print(f"Credits Used: {run['credit_used']}") print(f"Total Results: {run['total_results']}") if run['status'] in ['done', 'aborted', 'error']: print(f"Done Reason: {run['done_reason']}") print(f"Export Ready: {run['export_done']}") ``` ## Response ```json 200 theme={null} { "id": "0393be3ea6f74986906153df1c3f9894", "object": "run", "squid": "e445405ef4ab41208ef7d29b92a1a9dd", "created_at": "2025-02-04T10:26:50.847633", "started_at": "2025-02-04T10:25:41.623683", "ended_at": "2025-02-04T10:26:52.222239", "next_launch_at": null, "duration": 50.1833, "credit_used": 50.1833, "origin": "user", "force_launch": false, "status": "done", "export_done": true, "export_count": 1, "export_time": "2025-02-04T10:26:53.780636", "mail_done": false, "mail_time": null, "email_verification": null, "total_results": 40, "total_unique_results": 40, "done_reason": "tasks_done", "done_reason_desc": null } ``` ```json 404 theme={null} { "error": { "message": "Run not found", "type": "not_found_error", "param": "run_hash" } } ``` # Get Run Credits Source: https://docs.lobstr.io/docs/get-run-credits GET https://api.lobstr.io/v1/runs/{run_hash}/credits Retrieve the per-function credit breakdown for a completed run Returns a detailed credit breakdown for a single run, showing how credits were spent across base scraping and any enrichment functions (e.g. phone numbers, email extraction, images). Use this to understand the cost composition of a run and identify which functions drive the most spend. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the run. Example: `0393be3ea6f74986906153df1c3f9894` ## Response Fields The hash ID of the run. Example: `"0393be3ea6f74986906153df1c3f9894"` Total credits consumed by the run. Example: `116` Total number of results collected in the run. Example: `20` List of per-function credit entries, sorted by credits descending. Internal function name. `"base"` represents the core scraping step. Enrichment functions (e.g. `"get_phone_numbers"`, `"extract_emails_from_website"`) appear as separate entries. `"filters"` is a virtual entry that groups all active filter costs. Credits charged for this function. Example: `80` Number of results this function ran on. For the virtual `"filters"` entry this is `0`. Credit rates for the run's squid. Base cost per result. Example: `4` Cost per result for each enrichment function, keyed by function name. Example: `"get_phone_numbers": 6` Display color palette for each function, used by the dashboard UI. Background color hex. Example: `"#EAFBF3"` Text / foreground color hex. Example: `"#0F9F5F"` Human-readable display name for the base scraping step, derived from the squid's configuration. Example: `"Export Listings (No Phone)"`. `null` if the squid has no labelled main function. Per-filter credit detail when the squid charges for active filters (e.g. geo match, category match). Empty array if no filter costs apply. Internal filter parameter name. Example: `"geo_match"` Human-readable filter name shown in the UI. Example: `"Geo Match"` Credits charged per result for this filter. Example: `1` Total credits charged for this filter in the run. Example: `20` Credits are only charged for results that were successfully collected. Results discarded by filters (e.g. closed businesses, website filter, geo/category mismatch) are not billed. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/runs/0393be3ea6f74986906153df1c3f9894/credits" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests run_hash = "0393be3ea6f74986906153df1c3f9894" url = f"https://api.lobstr.io/v1/runs/{run_hash}/credits" headers = {"Authorization": "Token YOUR_API_KEY"} response = requests.get(url, headers=headers) data = response.json() print(f"Total credits: {data['total_credits']}") print(f"Total results: {data['total_results']}") avg = data['total_credits'] / data['total_results'] if data['total_results'] else 0 print(f"Avg cost per result: {avg:.2f}") for entry in data['breakdown']: print(f" {entry['function']}: {entry['credits']} credits ({entry['attempts']} results)") ``` ## Response ```json 200 theme={null} { "run_id": "0393be3ea6f74986906153df1c3f9894", "total_credits": 116, "total_results": 20, "breakdown": [ { "function": "base", "credits": 80, "attempts": 20 }, { "function": "get_phone_numbers", "credits": 36, "attempts": 20 } ], "rates": { "credits_per_row": 4, "get_phone_numbers": 6 }, "function_colors": { "Export Listings (No Phone)": { "bg_color": "#EAFBF3", "txt_color": "#0F9F5F" }, "get_phone_numbers": { "bg_color": "#EEF2F7", "txt_color": "#62748A" } }, "base_function_label": "Export Listings (No Phone)", "filter_breakdown": [] } ``` ```json 404 theme={null} { "detail": "Run not found." } ``` # Get Run Stats Source: https://docs.lobstr.io/docs/get-run-stats GET https://api.lobstr.io/v1/runs/{run_hash}/stats Retrieve detailed statistics about a specific run This endpoint retrieves detailed real-time statistics about a specific run, including progress information, estimated time remaining, and task completion status. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the run. Example: `300e9c5c127d421c90f431478d9a2cfb` ## Response Field Explanations The run's unique identifier. Example: `"300e9c5c127d421c90f431478d9a2cfb"` Always "run". Example: `"run"` Human-readable duration (HH:MM:SS format). Example: `"0:00:15.175532"` When the run started. Example: `"2025-02-10T14:30:55"` When the run ended (null if still running). Example: `"2025-02-10T14:31:10"` Whether the run has completed. Example: `true` Completion percentage. Example: `"100%"` Estimated time remaining ("∞" if unknown). Example: `"∞"` Total number of tasks in the run. Example: `10` Number of tasks completed. Example: `10` Number of tasks remaining. Example: `0` Total results collected in this run. Example: `6` Expected total results (if known). Example: `138` Results collected so far. Example: `6` Currently executing task (empty if none). Example: `""` Last update timestamp. Example: `"2025-02-10T14:31:10"` Poll this endpoint periodically to display real-time progress in your application. The eta field provides an estimate but may show "∞" for runs with unpredictable completion times. Use percent\_done for progress bars and total\_tasks\_left to show remaining work. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/runs/300e9c5c127d421c90f431478d9a2cfb/stats" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests import time run_hash = "300e9c5c127d421c90f431478d9a2cfb" url = f"https://api.lobstr.io/v1/runs/{run_hash}/stats" headers = { "Authorization": "Token YOUR_API_KEY" } # Poll for progress updates while True: response = requests.get(url, headers=headers) stats = response.json() print(f"Progress: {stats['percent_done']}") print(f"Tasks: {stats['total_tasks_done']}/{stats['total_tasks']} completed") print(f"Results: {stats['results_done']}/{stats['results_total']}") print(f"Duration: {stats['duration']}") print(f"ETA: {stats['eta']}") print("---") if stats['is_done']: print("Run completed!") break time.sleep(5) # Poll every 5 seconds ``` ## Response ```json 200 theme={null} { "id": "300e9c5c127d421c90f431478d9a2cfb", "object": "run", "duration": "0:00:15.175532", "ended_at": "2025-02-10T14:31:10", "eta": "∞", "is_done": true, "percent_done": "100%", "started_at": "2025-02-10T14:30:55", "total_requests": null, "total_results": 6, "total_tasks": 10, "total_tasks_done": 10, "total_tasks_left": 0, "current_task": "", "results_total": 138, "results_done": 6, "updated_at": "2025-02-10T14:31:10" } ``` ```json 404 theme={null} { "error": { "message": "Run not found", "type": "not_found_error", "param": "run_hash" } } ``` # Get Run Tasks Source: https://docs.lobstr.io/docs/get-run-tasks GET https://api.lobstr.io/v1/runtasks Retrieve a list of all tasks executed within a specific run This endpoint retrieves a paginated list of all tasks executed within a specific run, including their individual status, results, and parameters. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters | Parameter | Type | Required | Description | | - | - | - | - | | **run** | string | Yes | The run hash ID to get tasks for | | **page** | integer | No | Page number for pagination. Default: 1 | | **limit** | integer | No | Results per page. Default: 50, Max: 100 | ## Response Field Explanations Total number of run tasks. Example: `1` Array of run task objects. Example: `[...]` Unique run task identifier. Example: `"1262f6f99dac7dffb05a513fff0ded77"` Always "runtask". Example: `"runtask"` Original task identifier. Example: `"d30334cd8d21ab16048c5e2e7136a9f1"` Parent run identifier. Example: `"300e9c5c127d421c90f431478d9a2cfb"` Task execution status (completed, aborted, error, etc.). Example: `"aborted"` Task parameters. Example: `{"url": "https://..."}` When task execution started. Example: `"2025-02-10T14:30:58Z"` When task execution ended. Example: `"2025-02-10T14:31:10Z"` Total results expected from this task. Example: `138` Number of results actually collected. Example: `6` Total pages processed. Example: `1` Reason for task completion. Example: `"run_aborted"` Use this endpoint to debug which specific tasks failed or were incomplete in a run. The done\_reason field on individual tasks can differ from the overall run's done\_reason. Compare total\_results vs last\_result to see if a task collected all expected data. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/runtasks?run=300e9c5c127d421c90f431478d9a2cfb&page=1&limit=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/runtasks" headers = { "Authorization": "Token YOUR_API_KEY" } params = { "run": "300e9c5c127d421c90f431478d9a2cfb", "page": 1, "limit": 50 } response = requests.get(url, headers=headers, params=params) data = response.json() print(f"Total tasks in run: {data['total_results']}\n") for task in data['data']: status_icon = "✓" if task['status'] == "completed" else "✗" print(f"{status_icon} Task: {task['id']}") print(f" Status: {task['status']}") print(f" Results: {task['last_result']}/{task['total_results']}") print(f" Done Reason: {task['done_reason']}") print(f" Params: {task['params']}") print() ``` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "object": "runtask", "id": "1262f6f99dac7dffb05a513fff0ded77", "started_at": "2025-02-10T14:30:58Z", "ended_at": "2025-02-10T14:31:10Z", "total_results": 138, "last_result": 6, "total_pages": 1, "done_reason": "run_aborted", "last_page": 0, "status": "aborted", "run": "300e9c5c127d421c90f431478d9a2cfb", "task": "d30334cd8d21ab16048c5e2e7136a9f1", "params": { "url": "https://www.google.com/maps/search/restaurant/@43.2928346,5.3662584,17z" }, "last_collection_at": "2025-02-10T14:31:10Z", "done_reason_desc": null } ], "next": null, "previous": null } ``` # Get Squid Chain Source: https://docs.lobstr.io/docs/get-squid-chain GET https://api.lobstr.io/v1/squids/{id}/chain Retrieve the chain configuration for a squid Returns the chain configuration attached to a squid, or `null` if no chain is configured. ## Path Parameters Hash ID of the squid. Example: `"e86b29c032024b66aff529e1d43c2bd7"` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Code Examples ```bash cURL theme={null} curl "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" headers = {"Authorization": "Token YOUR_API_KEY"} response = requests.get(url, headers=headers) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "target_module": { "id": "9a3f1c8b2e7d4a56f0e1b2c3d4e5f678", "public_name": "Google Maps Reviews Scraper", "name": "googlemapreviews_matrix", "max_concurrency": 10 }, "target_cluster": { "id": "f7e8d9c0b1a2f7e8d9c0b1a2f7e8d9c0", "hash_value": "f7e8d9c0b1a2f7e8d9c0b1a2f7e8d9c0", "name": "Reviews (chained)" }, "field_map": {"url": "url"}, "is_active": true, "autostart": true, "cluster_name": "Reviews (chained)", "cluster_concurrency": 3, "created_at": "2026-04-28T10:00:00Z" } ``` ```json 200 theme={null} null ``` # Get Squid Details Source: https://docs.lobstr.io/docs/get-squid-details GET https://api.lobstr.io/v1/squids/{squid_hash} Retrieve comprehensive details about a specific squid including configuration, status, and integrations This endpoint retrieves comprehensive details about a specific squid, including its configuration settings, operational status, integration options, run statistics, and associated crawler information. ### Core Information Fields Unique identifier for the squid. Example: `"c106a44a98044ef18acc59986ae10967"` Display name of the squid. Example: `"Google Maps (1)"` Timestamp when the squid was created. Example: `"2024-01-15T10:30:00Z"` Which surface created this squid — `"api"`, `"sdk"`, `"cli"`, or `"mcp"`. `null` for squids created in the dashboard. The dashboard shows this as a badge next to the squid's name. Example: `"api"` Whether the squid is active and can run. Example: `true` Why the squid was deactivated, or `null` while it is active. Example: `null` Whether the squid has tasks and is ready to run. Example: `true` Unique identifier of the associated crawler. Example: `"4734d096159ef05210e0e1677e8be823"` Display name of the crawler. Example: `"Google Maps Search Export"` URL to the crawler's icon image. Example: `"https://cdn.lobstr.io/icons/google-maps.png"` Number of concurrent tasks the squid runs. Example: `2` Connected platform accounts linked to this squid. Empty (or `null`) for crawlers that need no account — see [Link Account to Squid](/docs/link-account-to-squid). Example: `[]` Whether found email addresses are verified automatically. Set it under the squid's advanced settings; only applies to crawlers whose `has_email_verification` is true. Example: `false` Crawler-specific parameter configuration object. Example: `{}` Whether to stop after completing all tasks. Example: `false` Important operational information or error messages. Example: `""` ### Common Parameters The `params` object contains crawler-specific settings. Most crawlers share these common parameters: Maximum results per task. null = unlimited. Example: `200` Maximum unique results across all tasks in a run. null = unlimited. Example: `null` Stop scraping when items older than this threshold are reached. Accepts a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM). Example: `"7d"` Timezone for interpreting an absolute `fetch_since` date (e.g. `"Europe/Paris"`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `"24h"` or `"7d"`. Example: `"Europe/Paris"` Deprecated — stop scraping when items older than this date are reached. Use fetch\_since instead. Example: `null` Optional add-on features. Each key is a boolean toggle. Enabling incurs extra credits per row. Example: `{"details": true}` ### Run Status & History Fields Current status of the most recent run (DONE, RUNNING, ERROR, etc.). Example: `"DONE"` ID of the most recent run. Example: `"abc123"` Timestamp of the last execution. Example: `"2024-01-20T15:45:00Z"` Why the run ended (tasks\_done, credits\_exhausted, user\_stopped, error). Example: `"tasks_done"` Total number of runs executed for this squid. Example: `5` Scheduled time for next run (null if not scheduled). Example: `"2024-01-21T10:00:00Z"` ### Export & Download Fields Temporary signed URL to download latest results (expires after a time period). Example: `null` Whether to export runs. Example: `true` Only export unique results, removing duplicates. Example: `true` Remove newlines from exported data. Example: `false` ### Integration Configuration Fields Google Sheets integration configuration (null if not configured). Contains is\_active flag. Example: `null` SFTP delivery settings (null if not configured). Contains is\_active flag. Example: `null` Amazon S3 export configuration (null if not configured). Contains is\_active flag. Example: `null` Webhook notifications setup (null if not configured). Contains is\_active flag. Example: `null` Slack integration settings (null if not configured). Contains is\_active flag. Example: `null` ### Scheduling Fields Cron schedule object with expression and timezone (null if not scheduled). Example: `null` Next scheduled execution time in human-readable format. Example: `"Daily at 10:00 AM"` ### Notification Fields Email address for notifications. Example: `"user@example.com"` Whether notifications are enabled. Example: `true` Notification configuration object containing run\_notify setting (on\_success, on\_error, or null). Example: `{"run_notify": "on_success"}` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the squid. Example: `c106a44a98044ef18acc59986ae10967` Check 'is\_ready' before starting a run. If false, you need to add tasks to the squid first. The 'message' field contains important operational information or error messages. Check this if a squid isn't behaving as expected. The 'download\_url' is a temporary signed URL that expires. Download results promptly or generate a new URL by re-fetching squid details. Use 'last\_run\_done\_reason' to understand why a run stopped. Common reasons: tasks\_done, credits\_exhausted, user\_stopped, error. Integration fields (google\_sheet\_fields, etc.) show 'is\_active: true' if enabled. Configure these to automate result delivery. Use `fetch_since` to stop scraping when older items are reached. Supports relative durations (`24h`, `7d`, `2w`) and absolute dates (`YYYY-MM-DD HH:MM`). When using an absolute date, set `fetch_since_timezone` to interpret it in the correct timezone (e.g. `"Europe/Paris"`). Replaces the older `hours_back` and `max_date` parameters. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/squids/c106a44a98044ef18acc59986ae10967" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests squid_id = "c106a44a98044ef18acc59986ae10967" url = f"https://api.lobstr.io/v1/squids/{squid_id}" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) squid = response.json() print(f"Squid: {squid['name']}") print(f"Status: {'Active' if squid['is_active'] else 'Inactive'}") print(f"Ready: {squid['is_ready']}") print(f"\nRun Statistics:") print(f" Total Runs: {squid['total_runs']}") print(f" Last Status: {squid['last_run_status']}") print(f" Last Run At: {squid['last_run_at']}") if squid.get('download_url'): print(f"\nDownload URL available: {squid['download_url'][:50]}...") print(f"\nIntegrations:") print(f" Google Sheets: {squid['google_sheet_fields']['is_active']}") print(f" FTP: {squid['ftp_fields']['is_active']}") print(f" S3: {squid['s3_fields']['is_active']}") print(f" Webhook: {squid['webhook_fields']['is_active']}") ``` ## Response ```json 200 theme={null} { "id": "c106a44a98044ef18acc59986ae10967", "created_at": "2025-02-25T09:01:13.575329", "created_via": "api", "name": "my-cool-squid", "is_ready": true, "is_active": true, "deactivation_reason": null, "concurrency": 1, "params": { "country": "United States", "ratings": "Any rating", "language": "English (United States)", "max_results": 20, "functions": { "fetch_business_images": false, "collect_business_details": false, "extract_emails_from_website": false } }, "download_url": "https://s3.eu-west-1.amazonaws.com/api.lobstr.io/temporary/lobstrc106a44a98044ef18acc59986ae10967/eebce7802e7740979a0b8450de10c99e.csv.csv?...", "email": "user@example.com", "schedule": null, "schedule_time": null, "no_line_breaks": true, "export_runs": true, "export_unique_results": true, "notifications": true, "notifications_params": { "run_notify": null }, "to_complete": false, "google_sheet_fields": { "url": "https://docs.google.com/spreadsheets/d/...", "append": false, "is_active": false }, "ftp_fields": { "host": "localhost", "port": 22, "is_active": false }, "s3_fields": { "bucket": null, "is_active": false }, "webhook_fields": { "url": "https://example.com/webhook", "is_active": false }, "crawler": "4734d096159ef05210e0e1677e8be823", "crawler_name": "Google Maps Search Export", "last_run_status": "DONE", "total_runs": 1, "next_launch_at": null, "last_run": "eebce7802e7740979a0b8450de10c99e", "last_run_at": "2025-03-05T09:27:17.012423", "last_run_done_reason": "tasks_done", "last_run_is_done": true, "is_public": true } ``` # Get Task Source: https://docs.lobstr.io/docs/get-task GET https://api.lobstr.io/v1/tasks/{task_hash} Retrieve detailed information about a specific task This endpoint retrieves detailed information about a specific task using its hash ID, including its current status, parameters, and execution history. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters The unique identifier (hash) of the task. Example: `c5e29d2aba8b77cdc56391e7405302de` ## Response Field Explanations Unique task identifier. Example: `"c5e29d2aba8b77cdc56391e7405302de"` Task creation timestamp (ISO 8601). Example: `"2024-12-24T10:57:55.045567"` Whether the task is active. Example: `true` Task parameters (URL, search terms, etc.). Example: `{"url": "https://..."}` Internal module identifier. Example: `5` Detailed execution status information. Example: `{...}` Always "task". Example: `"task"` ## Status Object Fields Current task status (pending, running, completed, aborted, failed). Example: `"completed"` When task execution started. Example: `"2025-02-04T10:25:47.278419"` When task execution ended. Example: `"2025-02-04T10:26:52.310738"` Whether the task has completed. Example: `true` Total number of results scraped. Example: `156` Total pages processed. Example: `1` Reason for task completion (completed, run\_aborted, error, etc.). Example: `"completed"` Whether errors occurred during execution. Example: `false` Error details if any occurred. Example: `null` Use the status.total\_results field to track how much data has been collected for this task. The done\_reason field helps identify why a task stopped - whether it completed normally, was aborted, or encountered errors. Tasks with status 'aborted' may have partial results. Check total\_results to see what was collected. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/tasks/c5e29d2aba8b77cdc56391e7405302de" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/tasks/c5e29d2aba8b77cdc56391e7405302de" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) task = response.json() print(f"Task ID: {task['hash_value']}") print(f"Created: {task['created_at']}") print(f"Active: {task['is_active']}") print(f"Parameters: {task['params']}") # Check execution status status = task['status'] print(f"\nExecution Status: {status['status']}") print(f"Results collected: {status['total_results']}") print(f"Pages processed: {status['total_pages']}") if status['is_done']: print(f"Completion reason: {status['done_reason']}") if status['has_errors']: print(f"Errors: {status['errors']}") ``` ## Response ```json 200 theme={null} { "hash_value": "c5e29d2aba8b77cdc56391e7405302de", "created_at": "2024-12-24T10:57:55.045567", "is_active": true, "params": { "url": "https://www.linkedin.com/in/johndoe" }, "module": 5, "status": { "status": "completed", "started_at": "2025-02-04T10:25:47.278419", "ended_at": "2025-02-04T10:26:52.310738", "is_done": true, "total_results": 156, "total_pages": 1, "done_reason": "completed", "has_errors": false, "errors": null }, "object": "task" } ``` ```json 404 theme={null} { "error": { "message": "Task not found", "type": "not_found_error", "param": "task_hash" } } ``` # Link Account to Squid Source: https://docs.lobstr.io/docs/link-account-to-squid POST https://api.lobstr.io/v1/squids/{squid_hash} Attach a platform account to a squid so account-based scrapers can authenticate Some scrapers require a connected platform account to run (LinkedIn, Facebook, Sales Navigator, etc.). Link one or more accounts to a squid by passing their hash IDs in the `accounts` array when updating the squid. Only scrapers that require authentication have an `accounts` field. For public scrapers (Google Maps, Trustpilot, etc.) this field is ignored. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Path Parameters The hash of the squid to update ## Body Parameters Array of account hash strings to link to the squid. Pass an empty array `[]` or `null` to remove all linked accounts. Each hash must correspond to an account of the correct type for the scraper. ## How to find your account hash Use [List Accounts](/docs/list-accounts) to retrieve your connected accounts and their `id` (hash) values: ```bash theme={null} curl -X GET "https://api.lobstr.io/v1/accounts" \ -H "Authorization: Token YOUR_API_KEY" ``` The `id` field in each account object is the hash you pass in the `accounts` array. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "accounts": ["YOUR_ACCOUNT_HASH"] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} # Step 1: get your account hashes accounts_response = requests.get(f"{BASE_URL}/accounts", headers=headers) accounts = accounts_response.json()["data"] # Find the account you want to link linkedin_account = next(a for a in accounts if a["type"] == "linkedin-sync") account_hash = linkedin_account["id"] # Step 2: link the account to your squid squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={"accounts": [account_hash]} ) print(response.json()) ``` ## Response ```json 200 theme={null} { "name": "LinkedIn Leads Scraper (1)", "concurrency": 1, "accounts": ["YOUR_ACCOUNT_HASH"] } ``` ## Removing linked accounts Pass an empty array to unlink all accounts from a squid: ```bash theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"accounts": []}' ``` ## Errors | Error | Cause | | - | - | | `AccountDoesNotExist` | One of the account hashes was not found or doesn't belong to you | | `InvalidParamType` | `accounts` is not an array, or contains non-string values | # List Account Types Source: https://docs.lobstr.io/docs/list-account-types GET https://api.lobstr.io/v1/account_types Retrieve available platform account types and their authentication requirements Some crawlers require user authentication (like Facebook, LinkedIn) through cookies or session tokens. The `account_type` object describes the required credentials for such modules. ### Account Type Fields | Field | Type | Description | | - | - | - | | **id** | string | Unique identifier of the account type | | **name** | string | The technical name of the account type (e.g., facebook-sync) | | **domain** | string | Name of the platform or website this account type connects to (e.g., Facebook) | | **baseurl** | string | The base URL for the platform's login or data-fetching endpoints | | **cookies** | array | A list of cookie names required for authentication. Some cookies may be marked as required or optional | ## Notes * If the `cookies` array is **empty**, it means **all cookies from the user session are required** for authentication. * Required cookies must be provided for the crawler to work. Missing cookies will result in authentication failure. > For implementation, always verify the required cookies in the `cookies` array when preparing your account object for a run. ## Account Limits Some account types include a `params` object that defines limits or batch configurations for the crawler when authenticated. These values help control usage and message sending. ### Account Limit Parameters | Parameter | Type | Description | | - | - | - | | **\[attribute]** | object | Represents the daily limit for a specific attribute (e.g., messages, profiles, searches) | | **batch** | object | (Optional) Defines the maximum number of actions per launch based on the attribute (e.g., messages, profiles) | | **batch\_hours** | object | (Optional) Defines the delay in hours between batch launches during the day | ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Use this endpoint to discover which platforms support authenticated scraping and what credentials they require. Account types with empty cookies arrays require all session cookies. Use browser dev tools to extract the full cookie set. Pay attention to the params object for rate limits. Exceeding these limits may result in account suspension on the target platform. The batch and batch\_hours parameters help you avoid triggering anti-bot measures by spacing out requests throughout the day. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/account_types" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/account_types" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) data = response.json() print(f"Available account types: {data['total_results']}\n") # Display account types and their required cookies for account_type in data['data']: print(f"Platform: {account_type['domain']}") print(f" Type: {account_type['name']}") print(f" Base URL: {account_type['baseurl']}") if account_type['cookies']: cookie_names = [c['name'] for c in account_type['cookies']] print(f" Required cookies: {', '.join(cookie_names)}") else: print(" Required cookies: All session cookies") if account_type['params']: print(f" Has rate limits: Yes") print() ``` ## Response There are 20 account types at the time of writing (Facebook, LinkedIn, Sales Navigator, Twitter/X, Instagram, Leboncoin, and more platform-specific ones). The example below shows 4 for brevity — `total_results` reflects the real full count. ```json 200 theme={null} { "total_results": 20, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 20, "data": [ { "id": "16f5b7f91e8fc533eab88be973273a02", "object": "account_type", "name": "facebook-sync", "icon": "", "domain": "Facebook", "params": {}, "baseurl": "https://www.facebook.com", "cookies": [ {"name": "c_user", "required": true}, {"name": "xs", "required": true} ] }, { "id": "77472acc63e41abde1fa2afd24bece4c", "object": "account_type", "name": "linkedin-sync", "icon": "", "domain": "Linkedin", "params": { "profiles": { "max": 1000, "default": 800, "display": "Profiles per day", "description": "Maximum number of profiles the account can scrape per day. Once this limit is reached, the run linked to this account pauses for 24 hours." } }, "baseurl": "https://www.linkedin.com", "cookies": [ {"name": "li_at", "required": true}, {"name": "JSESSIONID", "required": true} ] }, { "id": "cf67cafe03776e796f02a29f29ab2866", "object": "account_type", "name": "sales-nav-sync", "icon": "", "domain": "Sales Navigator", "params": { "batch": { "max": 20, "default": 20, "attribute": "profiles", "description": "Number of profiles visited per launch" }, "profiles": { "max": 150, "default": 150, "description": "Maximum number of profile requests per day" }, "searches": { "max": 200, "default": 200, "description": "Maximum number of searches per day" }, "batch_hours": { "max": 2, "default": 2, "description": "Hours between each launch during a day" } }, "baseurl": "https://www.linkedin.com", "cookies": [ {"name": "li_at", "required": true}, {"name": "JSESSIONID", "required": true}, {"name": "li_a", "required": true} ] }, { "id": "9853173fc00a940a33d7a420c176ad3b", "object": "account_type", "name": "twitter-sync", "icon": "", "domain": "Twitter", "params": {}, "baseurl": "https://x.com", "cookies": [ {"name": "auth_token", "required": true}, {"name": "ct0", "required": true} ] } ], "next": null, "previous": null } ``` # List Accounts Source: https://docs.lobstr.io/docs/list-accounts GET https://api.lobstr.io/v1/accounts Retrieve a paginated list of all connected platform accounts This endpoint retrieves a paginated list of all connected platform accounts (like Twitter, LinkedIn, Facebook) associated with the authenticated user. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Response Structure Total number of accounts. Example: `2` Maximum results per page. Example: `50` Current page number. Example: `1` Total number of pages. Example: `1` Starting result index. Example: `1` Ending result index. Example: `3` Array of account objects. Example: `[...]` URL for next page (null if last page). Example: `null` URL for previous page (null if first page). Example: `null` ## Account Object Fields Unique account identifier. Example: `"6e5f36d27502ec69fda745ec59ead509"` Always "account". Example: `"account"` Platform username. Example: `"MisterDebugger"` Account creation timestamp (ISO 8601). Example: `"2025-02-11T08:28:14Z"` Last sync timestamp. Example: `"2025-02-11T08:28:14Z"` HTTP status code. Example: `"200"` Status information. Example: `"synchronized"` Human-readable status message. Example: `"Success!"` Account type identifier. Example: `"facebook-sync"` Account parameters (default and user-specific). Example: `{"default": {}, "user": {}}` Last update timestamp. Example: `null` Account type identifier hash. Example: `"16f5b7f91e8fc533eab88be973273a02"` Array of squids using this account. Example: `[]` Platform base URL. Example: `"https://www.facebook.com"` Required cookie names for authentication. Example: `[{"name": "c_user", "required": true}]` Base64 encoded platform icon. Example: `""` The platform's brand colour, as a hex code — used to render the account in the dashboard. Example: `"#FF9900"` Unix timestamp at which a locked account unlocks again, or `null` when the account is not locked. Example: `null` Seconds remaining until this account's usage limit resets, or `null` when no limit has been reached. Example: `null` Use this endpoint to check which platform accounts are currently synced and their status before running squids that require authentication. The squids array shows which squids are currently using each account, helping you manage account usage across your projects. Check the status\_code\_info field to identify accounts with expired cookies that need re-synchronization. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/accounts" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/accounts" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) data = response.json() print(f"Total accounts: {data['total_results']}") print(f"Showing {data['result_from']}-{data['result_to']}\n") # Display connected accounts for account in data['data']: status = "✓" if account['status'] == "200" else "✗" print(f"{status} {account['username']} ({account['type']})") print(f" ID: {account['id']}") print(f" Status: {account['status_code_info']}") print(f" Platform: {account['baseurl']}") print() ``` ## Response ```json 200 theme={null} { "total_results": 2, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 3, "data": [ { "id": "6e5f36d27502ec69fda745ec59ead509", "object": "account", "username": "MisterDebugger", "created_at": "2025-02-11T08:28:14Z", "last_synchronization_time": "2025-02-11T08:28:14Z", "status": "200", "status_code_info": "synchronized", "status_code_description": "Success!", "type": "facebook-sync", "params": { "default": {}, "user": {} }, "updated_at": null, "account_type_hash": "16f5b7f91e8fc533eab88be973273a02", "squids": [], "baseurl": "https://www.facebook.com", "cookies": [ {"name": "c_user", "required": true}, {"name": "xs", "required": true} ], "icon": "" }, { "id": "abfeb440ceccdfab974e8d261836c9d6", "object": "account", "username": "MisterDebugger", "created_at": "2025-02-11T08:28:22Z", "last_synchronization_time": "2025-02-11T08:28:22Z", "status": "200", "status_code_info": "synchronized", "status_code_description": "Success!", "type": "twitter-sync", "params": { "default": {}, "user": {} }, "updated_at": null, "account_type_hash": "9853173fc00a940a33d7a420c176ad3b", "squids": [], "baseurl": "https://x.com", "cookies": [ {"name": "auth_token", "required": true}, {"name": "ct0", "required": true} ], "icon": "" } ], "next": null, "previous": null } ``` ```json 401 theme={null} { "detail": "Invalid token." } ``` # List Crawlers Source: https://docs.lobstr.io/docs/list-crawlers GET https://api.lobstr.io/v1/crawlers Retrieve a list of all available crawlers and their capabilities This endpoint returns a paginated list of all available crawlers on the lobstr.io platform. Each crawler is designed to extract specific types of data from different sources. Use this endpoint to discover which crawlers are available for your data collection needs before creating squids or adding tasks. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Content type of the request. Value: `application/json` ## Response Structure Total number of crawlers available. Example: `71` Number of results per page. Example: `50` Current page number. Example: `1` Total number of pages available. Example: `1` Starting index of results in current page. Example: `1` Ending index of results in current page. Example: `71` Array of crawler objects with comprehensive details Full URL to the next page (null if on last page). Example: `null` Full URL to the previous page (null if on first page). Example: `null` ## Crawler Object Fields Unique identifier (hash) for the crawler. Example: `"4734d096159ef05210e0e1677e8be823"` Human-readable name of the crawler. Example: `"Google Maps Search Export"` URL-friendly identifier. Example: `"google-maps-search-export"` Whether the crawler is publicly available. Example: `true` Whether the crawler is currently available for use (false if paused). Example: `true` Requires premium subscription or extra credits. Example: `false` Currently experiencing issues (runs paused until fixed). Example: `false` Maximum number of concurrent tasks allowed for this crawler. Example: `20` Credits charged per result row, keyed by plan type: `current` is the rate on today's plans, `legacy` the rate kept by grandfathered subscriptions. Example: `{"legacy": 1, "current": 1}` Credits charged per email found, keyed the same way as `credits_per_row`. Only meaningful for crawlers with an email enrichment function. Example: `{"legacy": 100, "current": 2}` Whether this crawler can verify the email addresses it finds. Example: `true` What the crawler collects, as shown in the store. Example: `"Export every follower of a public Instagram account"` Link to the crawler's help article, or `null` when it has none. Example: `null` Position in the public store listing. `null` for crawlers that are not ranked. Example: `1` Throughput profile of the crawler's default worker — `success_ratio`, `min_rate_per_worker`, and `max_rate_per_worker`. `null` when no profile is published. Same throughput profile for the email enrichment worker. `null` when the crawler has no email function. Crawlers this one can chain into. Empty when the crawler supports no chaining — see [Get Crawler Details](/docs/get-crawler-details) for the shape of each entry. Required account sync details (null if no authentication needed). Example: `null` Base64-encoded SVG icon for UI display. Example: `"data:image/svg+xml;base64,PHN2ZyB4bWxucz..."` Cache the list of crawlers locally as it doesn't change frequently. This reduces unnecessary API calls and improves your application's performance. Each crawler has a unique hash identifier that you'll use when creating squids or configuring data collection tasks. Check the crawler parameters endpoint to see what configuration options are available for each crawler before starting your scraping operations. ## Available Crawlers Quick reference of all public crawlers and their IDs. Use the **Crawler ID** as the `squid_hash` when creating a squid or as the `crawler_id` when querying by crawler. | Crawler Name | Crawler ID | | - | - | | Amazon Reviews Scraper | `787abfafd394be3b12ee2ac7d14303fe` | | AutoScout24 Listings Scraper | `0a09add2a3c455037a972db81b1c0219` | | Bien'Ici Search Export | `53317cbe332e408c5c46372a18e4fc76` | | Contact Details Scraper | `7d83eacc7b94f14d5ffda28c6d357961` | | Facebook Ad Library Scraper | `f667dfc7398156ba2359836105184825` | | Facebook Business Page Scraper | `c80e36ed76bfae3c332e8983971403d7` | | Facebook Comments Scraper | `3cf27be3402dbc529ed0db7d18135e8c` | | Facebook Marketplace Scraper | `640e3d2f62769800fdb05f957f3a2415` | | Facebook Pages Search Export | `c47dfc2beba9fdc2472d3b3321b06b66` | | Facebook Private Group Posts Scraper | `3eea12bc7d80cf05b6fc38eaf9f28f77` | | Facebook Public Group Posts Scraper | `9b0bb2e04c6f7c475a9da9bb20530dac` | | Glassdoor Jobs Scraper | `4bc153aae1e138d894b630bf165825ee` | | Google Maps Leads Scraper | `4734d096159ef05210e0e1677e8be823` | | Google Maps Reviews Scraper | `e625ce52e98a6d4d1b53ef36dff7dacb` | | Google News Search Export | `06faf01896336c01ffb5e96d13dd406c` | | Google Search Scraper | `f588385d11c48f8af51560e561077238` | | Idealista Listings Search Export | `5f4b269e29e601e09fa50f4155b3970e` | | Immoweb Listings & Phones Search Export | `9bca6a0a4cc5237b37798f8640dce087` | | Instagram Followers Scraper | `5575499b33df1f165e72b29a12892a9e` | | Instagram Post Comments Scraper | `438eabd1f513b6773600c166ad3ddbb4` | | Instagram Post Scraper | `d25fddae52eb78eb385e60bc2adb6d1e` | | Instagram Profile Scraper | `5c55ffbf10fbbc7ee63ebb2bcaa332b7` | | Instagram Reels Scraper | `4aad3ef0de6a5cea65b48dd575531a8c` | | Instagram Search & Hashtags Scraper | `84adfa9c253a9a481b2f093a81e019e2` | | LaCentrale Cars Scraper | `665c260fd9139121a4530d23b35b26db` | | LaCentrale Listing Status Checker | `1d7fbb550feb1cf93e3e439039bcd687` | | Leboncoin Auto Message Sender | `fa9c988768a3d61f358916400f3c4b65` | | Leboncoin Boutiques Scraper | `c6e88128aef71c079e58f0518687e10c` | | Leboncoin Listing Scraper | `9eade2d2a693bd871851806650e7fb4e` | | Leboncoin Listing Status Checker | `0c60c33b95db65c86d5c9fc127b7b2aa` | | Leboncoin Listings & Phone Search Export | `7bc4acdb18f2b90fdd5eb42b8e8251e9` | | Leboncoin Listings Search Export | `33db1ca85160105eeb84d5aa51cfad10` | | LinkedIn Company Employees Scraper | `08ac061ab290b5ae0f831e086c98d4b5` | | LinkedIn Company Scraper | `a6fab652671e54f962ce9ebe48d5ffed` | | LinkedIn Leads Scraper | `aa164b3c44d4f435fe5e04ddf6757296` | | LinkedIn Posts Commenters and Likers Scraper | `8a309e0e0df48511111a9da6382b2ef8` | | LinkedIn Posts Scraper | `6a9159b682cfb187977ae5c645e4df7a` | | LinkedIn Profile & Email Scraper (No Login) | `e7c4200bab5942e5329f711e26c0666b` | | LinkedIn Profile Scraper | `5c11752d8687df2332c08247c4fb655a` | | Naukri Jobs Scraper | `28ca7564a332a081a1dabda552d5c35b` | | Pages Jaunes Companies Search Export | `cd3e6b39d78365cd9d0ffbe1c7f5e5bd` | | PAP Search Export | `9980d62d6a23161a08d1134c0cabdf5c` | | ParuVendu Listings Scraper | `6a564030e814e6de4931637f7fb0c06e` | | Quora Scraper | `7a8473daa49fb96711016aa655384bb3` | | Realtor Property Listings Scraper | `f388a9866f943bc5c29bde8b33587bd3` | | Reddit Scraper | `6f99262f742b533d96936bf4088fba3e` | | Sales Navigator Companies Scraper | `6b66cba236b64604581864230e1f4d36` | | Sales Navigator Leads Scraper | `a1d243d3824a1ac773414416eb80362d` | | Sales Navigator Profile Scraper | `40d08f9bfec4a8775bb5586ce7b33a35` | | SeLoger Search Export | `78f5839ee4b97c30e67eec391b907dd0` | | Threads Scraper | `7308ae543e6abc70438d6b968d3a1b38` | | TikTok Comments Scraper | `5fc7b468267ec881344a11ac05c15a76` | | TikTok Profile Scraper | `089d76c66c2fd5c57d7ce7338d9ae7de` | | TikTok Top Ads Scraper | `b5079ede3002655d286a03ad29604ac6` | | TikTok Video Scraper | `1e6cba50f2713539a2b0ac784184ed92` | | TripAdvisor Restaurants Search Export | `f781435f026b36b19ef74d591a077cb7` | | TripAdvisor Reviews Scraper | `83970312f2402accbb3553b326a2c8eb` | | Trustpilot Reviews Scraper | `b3362ab52c6fab3d8897af79cbba380e` | | Twitter Followers & Following Scraper | `8c6eed231ba0378c42efbe391f70d6d8` | | Twitter Profile Scraper | `6c5227261fbbd3430f926d409f4c44bf` | | Twitter Search Results Scraper | `1b16ff414d27920fb325b68436dbf5fc` | | Twitter User Tweets Scraper | `9d6b83aaf1ae9d5b4a775d223e3eb5df` | | Upwork Jobs Scraper | `681a0d2e2641326f7b87cda35513618a` | | Vinted Products Scraper | `ffd34f9b42a79b7323a048f09fc158e6` | | Yellow Pages Companies Search Export | `03fcec3e9345dbf9e42a0a2f2f04c017` | | Yelp Reviews Scraper | `ea1c83f60e32a4e1de91a1ed1e41b268` | | Yelp Search Export | `ac92974d3c1c9f8d3997767f090fa0b8` | | YouTube Channel Scraper | `8dce74bb8c2330fdafee70baa22b4709` | | YouTube Comments Scraper | `66e9fbe07ae0a543576dc6ff241c229c` | | YouTube Transcript Scraper | `7a9835f866cd42905e75aaeadebe6aba` | | Zillow Property Listings Scraper | `ed06bb5ca6544bbb638c544bac48ede1` | ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/crawlers" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/crawlers" headers = { "Authorization": "Token YOUR_API_KEY" } response = requests.get(url, headers=headers) data = response.json() print(f"Total crawlers: {data['total_results']}") print(f"Showing {data['result_from']}-{data['result_to']}\n") # Display available crawlers for crawler in data['data']: status = "✓" if crawler['is_available'] else "✗" premium = " [PREMIUM]" if crawler['is_premium'] else "" print(f"{status} {crawler['name']}{premium}") print(f" ID: {crawler['id']}") print(f" Credits: {crawler['credits_per_row']['current']} per row") print() ``` ## Response ```json 200 theme={null} { "total_results": 198, "limit": 50, "page": 1, "total_pages": 4, "result_from": 1, "result_to": 50, "data": [ { "id": "6c5227261fbbd3430f926d409f4c44bf", "object": "crawler", "account": null, "name": "Twitter Profile Scraper", "slug": "twitter-profile-scraper", "description": "Scrape Twitter profile informations from a given username.", "help_article": null, "rank": 11, "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9zdmc+", "is_public": true, "is_available": true, "is_premium": false, "has_issues": false, "max_concurrency": 20, "credits_per_row": { "legacy": 2, "current": 1 }, "credits_per_email": { "legacy": 2, "current": 2 }, "has_email_verification": false, "default_worker_stats": null, "email_worker_stats": null, "chains": [] }, { "id": "c47dfc2beba9fdc2472d3b3321b06b66", "object": "crawler", "account": { "type": "facebook-sync", "baseurl": "https://www.facebook.com", "cookies": [ { "name": "c_user", "required": true }, { "name": "xs", "required": true } ], "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9zdmc+" }, "name": "Facebook Pages Search Export", "slug": "facebook-pages-search-export", "description": "Collect all facebook pages from a keyword", "help_article": null, "rank": 14, "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9zdmc+", "is_public": true, "is_available": true, "is_premium": false, "has_issues": false, "max_concurrency": 20, "credits_per_row": { "legacy": 20, "current": 1 }, "credits_per_email": { "legacy": 2, "current": 2 }, "has_email_verification": false, "default_worker_stats": null, "email_worker_stats": null, "chains": [] }, { "id": "a1d243d3824a1ac773414416eb80362d", "object": "crawler", "account": { "type": "sales-nav-sync", "baseurl": "https://www.linkedin.com", "cookies": [ { "name": "li_at", "required": true }, { "name": "JSESSIONID", "required": true } ], "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9zdmc+" }, "name": "Sales Navigator Leads Scraper", "slug": "sales-navigator-leads-scraper", "description": "Give us your properly built Sales Navigator Leads search URL(s). Grab all profiles available. Use our third-party service, and get mails!", "help_article": null, "rank": 4, "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9zdmc+", "is_public": true, "is_available": true, "is_premium": false, "has_issues": false, "max_concurrency": 20, "credits_per_row": { "legacy": 5, "current": 1 }, "credits_per_email": { "legacy": 2, "current": 2 }, "has_email_verification": false, "default_worker_stats": null, "email_worker_stats": null, "chains": [] } ], "next": null, "previous": null } ``` # List Runs Source: https://docs.lobstr.io/docs/list-runs GET https://api.lobstr.io/v1/runs Retrieve a paginated list of all runs for a specific squid This endpoint retrieves a paginated list of all runs for a specific squid. Use this to view run history and track past executions. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters | Parameter | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | The squid hash ID to list runs for | | **page** | integer | No | Page number for pagination. Default: 1 | | **limit** | integer | No | Results per page. Default: 50, Max: 100 | ## Response Field Explanations Total number of runs. Example: `4` Maximum results per page. Example: `50` Current page number. Example: `1` Total number of pages. Example: `1` Array of run objects. Example: `[...]` Unique run identifier. Example: `"381cfbb47e474782857ddc035298b6f3"` Current run status. Example: `"done"` Whether the run has completed. Example: `true` Number of results collected. Example: `156` Run duration in seconds. Example: `3.1849` Credits consumed. Example: `3.1849` Reason for completion. Example: `"tasks_done"` URL for next page (null if last page). Example: `null` URL for previous page (null if first page). Example: `null` Use this endpoint to monitor all past and current runs for a squid. Runs are returned in reverse chronological order (newest first). Check is\_done to quickly filter completed vs. active runs. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/runs?squid=b6c56d18cb0046949461ba9ca278e8ad&page=1&limit=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/runs" headers = { "Authorization": "Token YOUR_API_KEY" } params = { "squid": "b6c56d18cb0046949461ba9ca278e8ad", "page": 1, "limit": 50 } response = requests.get(url, headers=headers, params=params) data = response.json() print(f"Total runs: {data['total_results']}") print(f"Page {data['page']} of {data['total_pages']}\n") for run in data['data']: status_icon = "✓" if run['is_done'] else "⟳" print(f"{status_icon} Run: {run['id']}") print(f" Status: {run['status']}") print(f" Results: {run['total_results']}") print(f" Credits: {run['credit_used']}") print(f" Reason: {run['done_reason']}") print() ``` ## Response ```json 200 theme={null} { "total_results": 4, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 4, "data": [ { "id": "381cfbb47e474782857ddc035298b6f3", "object": "run", "squid": "b6c56d18cb0046949461ba9ca278e8ad", "is_done": true, "started_at": "2025-02-04T10:25:13Z", "total_results": 156, "total_unique_results": 156, "next_launch_at": null, "ended_at": "2025-02-04T10:25:21Z", "duration": 8.0415, "credit_used": 8.0415, "origin": "user", "force_launch": false, "status": "done", "export_done": true, "export_count": 1, "export_time": "2025-02-04T10:25:25Z", "email_done": null, "email_time": null, "created_at": "2025-02-04T10:25:13Z", "done_reason": "tasks_done", "done_reason_desc": null }, { "id": "3aa75b3f05c144f6a87f8397e229024e", "object": "run", "squid": "b6c56d18cb0046949461ba9ca278e8ad", "is_done": true, "started_at": "2025-01-29T09:53:27Z", "total_results": 0, "total_unique_results": 0, "next_launch_at": null, "ended_at": "2025-01-29T09:53:33Z", "duration": 0.0466, "credit_used": 0.0466, "origin": "user", "force_launch": false, "status": "done", "export_done": true, "export_count": 1, "export_time": "2025-01-29T09:53:37Z", "email_done": null, "email_time": null, "created_at": "2025-01-29T09:53:27Z", "done_reason": "tasks_done", "done_reason_desc": null } ], "next": null, "previous": null } ``` # List Squids Source: https://docs.lobstr.io/docs/list-squids GET https://api.lobstr.io/v1/squids Retrieve a paginated list of all your squids with filtering and search capabilities This endpoint returns a paginated list of all squids belonging to the authenticated user. You can search by name and control pagination with query parameters. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Filter squids by name (case-insensitive partial match). Example: `Google` Number of results per page. Example: `10` Page number for pagination. Example: `2` ## Response Structure Total number of squids matching the query. Example: `15` Number of results per page. Example: `50` Current page number. Example: `1` Total number of pages available. Example: `1` Starting index of results in current page. Example: `1` Ending index of results in current page. Example: `15` Array of squid objects with comprehensive details Full URL to the next page (null if on last page). Example: `null` Full URL to the previous page (null if on first page). Example: `null` ## Squid Object Fields Unique squid identifier. Example: `"c106a44a98044ef18acc59986ae10967"` Display name of the squid. Example: `"Google Maps (1)"` Timestamp when the squid was created. Example: `"2024-01-15T10:30:00Z"` Which surface created this squid — `"api"`, `"sdk"`, `"cli"`, or `"mcp"`. `null` for squids created in the dashboard. Example: `"cli"` Whether the squid is active and can run. Example: `true` Why the squid was deactivated, or `null` while it is active. Example: `null` Whether the squid has tasks and is ready to run. Example: `true` Unique identifier of the associated crawler. Example: `"4734d096159ef05210e0e1677e8be823"` Display name of the crawler. Example: `"Google Maps Search Export"` URL to the crawler's icon image. Example: `"https://cdn.lobstr.io/icons/google-maps.png"` Whether the crawler is publicly available. Example: `true` Number of concurrent tasks the squid runs. Example: `2` Crawler-specific parameter configuration object. Example: `{"language": "en"}` Whether to stop after completing all tasks. Example: `false` Whether to export only unique results. Example: `true` Whether to remove line breaks from exported data. Example: `false` Status of the most recent run (completed, running, error, etc.). Example: `"DONE"` Timestamp of the most recent run. Example: `"2024-01-20T15:45:00Z"` Total number of times the squid has been executed. Example: `5` Scheduled time for the next automated run (null if not scheduled). Example: `"2024-01-21T10:00:00Z"` Google Sheets integration configuration (null if not configured). Example: `null` FTP integration configuration (null if not configured). Example: `null` AWS S3 integration configuration (null if not configured). Example: `null` Webhook integration configuration (null if not configured). Example: `null` Cron expression for scheduled runs (null if not scheduled). Example: `"0 10 * * *"` Human-readable schedule description. Example: `"Daily at 10:00 AM"` Temporary signed URL to download results (null if no results available). Example: `"https://storage.lobstr.io/downloads/xyz123..."` Use the 'name' query parameter to quickly find squids. It performs a case-insensitive partial match on squid names. The 'next' and 'previous' fields contain full URLs for easy pagination. Use them directly to navigate through pages. Check 'last\_run\_status' to see if a squid has completed, is running, or encountered errors. Useful for monitoring multiple squids. Squids with 'is\_ready: false' haven't been configured with tasks yet. Add tasks before starting a run. The 'download\_url' field provides a temporary signed URL to download results. URLs expire after a certain time period. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/squids?name=Google&limit=10&page=1" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/squids" headers = { "Authorization": "Token YOUR_API_KEY" } params = { "name": "Google", "limit": 10, "page": 1 } response = requests.get(url, headers=headers, params=params) data = response.json() print(f"Total squids found: {data['total_results']}") print(f"Page {data['page']} of {data['total_pages']}\n") for squid in data['data']: status = "Active" if squid['is_active'] else "Inactive" print(f"{squid['name']} ({status})") print(f" ID: {squid['id']}") print(f" Crawler: {squid['crawler_name']}") print(f" Total Runs: {squid['total_runs']}") print(f" Last Status: {squid['last_run_status'] or 'Never run'}\n") if data['next']: print(f"Next page: {data['next']}") ``` ## Response ```json 200 theme={null} { "total_results": 34, "limit": 10, "page": 1, "total_pages": 4, "result_from": 1, "result_to": 10, "data": [ { "id": "e86b29c032024b66aff529e1d43c2bd7", "created_at": "2025-02-03T14:24:23Z", "created_via": "api", "name": "My Google Maps Scraper", "is_ready": true, "is_active": true, "deactivation_reason": null, "concurrency": 2, "params": { "country": "United States", "ratings": "4.0+", "language": "English (United States)", "max_results": 150 }, "crawler": "4734d096159ef05210e0e1677e8be823", "crawler_name": "Google Maps Search Export", "last_run_status": "DONE", "total_runs": 5, "last_run_at": "2025-03-05T09:27:17.012423", "next_launch_at": null, "is_public": true } ], "next": "https://api.lobstr.io/v1/squids?limit=10&page=2", "previous": null } ``` # List Tasks Source: https://docs.lobstr.io/docs/list-tasks GET https://api.lobstr.io/v1/tasks Retrieve a paginated list of tasks for a specific squid This endpoint retrieves a paginated list of tasks for a specific squid. You can choose between two query types to get different levels of detail. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters | Parameter | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | The squid hash ID to list tasks for | | **type** | string | No | Filters by how the task was submitted, not a detail level: 'url' returns only tasks created with a `url` field; 'params' returns only tasks created with structured parameters instead (e.g. Google Maps Leads Scraper's city/category/country mode). These are mutually exclusive result sets. Omit `type` to get all tasks regardless of shape. For crawlers that only ever accept a `url` (most of them), `type=params` will always return an empty list — that's expected, not a bug. | | **page** | integer | No | Page number for pagination. Default: 1 | | **limit** | integer | No | Results per page. Default: 50, Max: 100 | ## Response Field Explanations Total number of tasks. Example: `2` Maximum results per page. Example: `50` Current page number. Example: `1` Total number of pages. Example: `1` Array of task objects. Example: `[...]` Unique task identifier. Example: `"6b9d3afdf4e76df374915a50d7a495c4"` Task creation timestamp. Example: `"2025-03-05T09:24:49.581177"` Whether the task is active. Example: `true` Task parameters. Example: `{"url": "..."}` URL for next page (null if last page). Example: `null` URL for previous page (null if first page). Example: `null` Omit `type` unless you specifically need to isolate one task shape — most squids only ever use one or the other, so filtering by `type` on a URL-only crawler will just return nothing. Results are paginated. Use the next and previous URLs to navigate through large task lists. Check is\_active to identify tasks that are ready to run vs. disabled tasks. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/tasks?squid=a1b2c3d4e5f6g7h8i9j0&type=params&page=1&limit=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/tasks" headers = { "Authorization": "Token YOUR_API_KEY" } params = { "squid": "a1b2c3d4e5f6g7h8i9j0", "type": "params", # Only tasks created with structured params, not a url "page": 1, "limit": 50 } response = requests.get(url, headers=headers, params=params) data = response.json() print(f"Total tasks: {data['total_results']}") print(f"Page {data['page']} of {data['total_pages']}\n") # Display tasks for task in data['data']: status = "Active" if task['is_active'] else "Inactive" print(f"[{status}] Task: {task['id']}") print(f" Created: {task['created_at']}") print(f" Params: {task['params']}") print() # Check for more pages if data['next']: print(f"Next page: {data['next']}") ``` ## Response ```json 200 theme={null} { "total_results": 2, "limit": 50, "page": 1, "total_pages": 1, "data": [ { "id": "6b9d3afdf4e76df374915a50d7a495c4", "created_at": "2025-03-05T09:24:49.581177", "is_active": true, "params": { "url": "https://www.linkedin.com/in/johndoe" } }, { "id": "c5e29d2aba8b77cdc56391e7405302de", "created_at": "2025-03-05T09:24:49.581177", "is_active": true, "params": { "url": "https://www.linkedin.com/in/janedoe" } } ], "next": null, "previous": null } ``` # MCP Server Source: https://docs.lobstr.io/docs/mcp Connect Claude, ChatGPT, Cursor, Grok, or any MCP client to lobstr.io and run web scrapers in your account — discover, configure, run, monitor, and retrieve results, all in the conversation. The lobstr.io **MCP Server** lets an AI client operate your lobstr.io account directly. Discover a scraper, read its inputs, run it, watch the run, and pull results — without leaving the chat and without manual CSV export/import. **Endpoint:** `https://mcp.lobstr.io/mcp` Discover scrapers, run and monitor them, fetch results, and check your credits and connected platform accounts. Connect with your own lobstr.io login. You approve on lobstr.io — no password ever reaches the AI client. Standard MCP transport, compatible with Claude, ChatGPT, Cursor, Grok, and Codex. This is the **operational** server — it acts in your account and spends credits. For a public, no-auth assistant that only answers questions about the API docs, see the [Documentation MCP](/docs/docs-mcp). ## Before you start * A [lobstr.io account](https://app.lobstr.io) with credits — running a scraper spends credits from your balance. * An MCP-capable client (Claude, ChatGPT, Cursor, Grok, Codex, …). No client ID or secret to paste: the server supports Dynamic Client Registration, so your client registers itself. ## Setup ```bash Claude Code theme={null} claude mcp add --transport http lobstr https://mcp.lobstr.io/mcp ``` ```json Claude Desktop theme={null} { "mcpServers": { "lobstr": { "type": "http", "url": "https://mcp.lobstr.io/mcp" } } } ``` ```json Cursor (.cursor/mcp.json) theme={null} { "mcpServers": { "lobstr": { "type": "http", "url": "https://mcp.lobstr.io/mcp" } } } ``` ```bash Codex CLI theme={null} codex mcp add lobstr --url https://mcp.lobstr.io/mcp ``` ```toml Codex (~/.codex/config.toml) theme={null} [mcp_servers.lobstr] url = "https://mcp.lobstr.io/mcp" ``` **Claude.ai and ChatGPT** — add it as a **custom connector** in settings, using `https://mcp.lobstr.io/mcp`. Both drive the sign-in flow for you. **Codex** — `codex mcp add` starts the sign-in right away. If you added the server through `config.toml`, or need to sign in again, run `codex mcp login lobstr`. **Grok** — available to Grok Bots with a SuperGrok plan or through a Cursor subscription: 1. In any Bot, send: *Add a custom mcp server called lobstr.io, it's at [https://mcp.lobstr.io/mcp](https://mcp.lobstr.io/mcp)* (keep the trailing `/mcp`). 2. When the Bot asks to add the lobstr.io connector, choose **Add it**. 3. Use the connect card the Bot posts to open the lobstr.io consent page, and click **Allow**. 4. Ask the Bot *Who am I?* to check the connection. The server then shows for all your Bots under **Settings → Plugins → Yours**. More in the [Grok guide](https://help.lobstr.io/integrations/grok). After adding the server, your client opens the lobstr.io consent page: you're already signed in, you click **Allow**, and you're returned to the client. On a headless box the authorize URL is printed for you to open in a browser. ## Connecting your account The server uses OAuth 2.1 with PKCE. You approve the connection on lobstr.io's own site, so **no password is ever sent to the AI client or to the MCP server**. You choose what to allow, per these scopes: | Scope | Grants | | - | - | | `crawlers:read` | Discover scrapers and read their settings | | `runs:read` | Check the status of your runs | | `results:read` | Read your scraped results | | `profile:read` | View your profile (name, email, plan) and credit balance | | `account:read` | View your connected platform accounts (LinkedIn, Facebook, …) and their status | | `runs:execute` | Run scrapers on your behalf (spends credits); together with `account:read`, also lets the client attach a connected account to a squid | You can revoke access at any time from your lobstr.io account. ## Tools A **crawler** is a scraper template (e.g. "Google Maps"); a **squid** is one you've configured from it. A **run** is one execution of a squid. #### Discover & inspect | Tool | Type | Description | | - | - | - | | `search_scrapers` | read | Find the most relevant scrapers (crawlers) for a request. | | `get_scraper_details` | read | A scraper's input schema, output fields, and pricing. | | `list_my_scrapers` | read | Your saved scrapers (squids) — paged, with name / crawler filters. | | `get_my_scraper` | read | Inspect one saved scraper's configuration. | #### Run & monitor | Tool | Type | Description | | - | - | - | | `run_scraper` | **write · spends credits** | Configure and start a run. Returns a `run_id`. | | `get_run` | read | Status and progress of a run. | | `wait_for_run` | read | Wait for a run to finish, up to 50 seconds per call; call again if it's still going. | | `list_runs` | read | Recent runs for a scraper. | | `abort_run` | write | Stop a running job. | | `empty_scraper` | write | Clear a scraper's tasks so it can be reused with new inputs. | | `deactivate_scraper` | write | Free a saved scraper's concurrency slot without deleting it; stops any run in progress. | #### Build a run step by step An alternative to `run_scraper` for building up a squid across several calls instead of one — useful for large or incremental task lists. | Tool | Type | Description | | - | - | - | | `create_squid` | write | Create a saved scraper (squid) from a crawler, without running it. | | `add_tasks` | write | Add input rows to a squid; callable repeatedly to build up a batch. | | `update_scraper` | write | Change a squid's name, settings, or concurrency without running it or touching its tasks. | | `estimate_run` | read | Credit cost, projected results, and estimated time for a squid's current tasks. | #### Results | Tool | Type | Description | | - | - | - | | `get_results` | read | One page of results for a run (row-capped, with field selection). | | `get_results_url` | read | A signed URL to download the full result set as a file. | #### Your account | Tool | Type | Description | | - | - | - | | `check_credits` | read | Your credit balance and concurrency slots. | | `whoami` | read | Your account identity (email, name, plan). | #### Connected accounts The platform logins your scrapers authenticate with (LinkedIn, Facebook, …) — distinct from your lobstr.io account above. | Tool | Type | Description | | - | - | - | | `list_accounts` | read | The platform accounts scrapers log in with, and their status. | | `get_account` | read | One connected account's status and which scrapers use it. | | `attach_account` | write | Link a connected account to a squid so it can launch a run. See [account-backed scrapers](#account-backed-scrapers) below. | `list_accounts` and `get_account` return **metadata only** — never credentials or cookies. `attach_account` only ever sends account ids it looked up itself. New scrapers work automatically — `get_scraper_details` reads each scraper's live input schema, so nothing here needs updating when lobstr.io adds one. ## Credits and confirmation Running a scraper spends credits, and lobstr.io prices **per result row** — so the total isn't known until the run completes. `run_scraper` estimates the cost and, when it's above a threshold or unknown, returns a confirmation request instead of running; the client asks you, and only then does it execute. The read tools never spend credits. ## Account-backed scrapers Some scrapers log in to a platform on your behalf — the LinkedIn Leads Scraper and Sales Navigator Leads Scraper, for example — and need a **connected account** synced in your lobstr.io dashboard first. Without one, the run starts but fails immediately with no account available to launch it. * **The account type must match the scraper.** An account is linked to one platform (LinkedIn, Facebook, …); it can only run a scraper for that same platform. * **`run_scraper` attaches one automatically** when exactly one connected account of the right type is healthy and not rate limited. With several matching accounts, or none, it asks you to choose instead of guessing — connect an account from your dashboard, or call `attach_account` with the one you want. * **Attaching only adds.** An account already on a squid is never replaced, and automatic selection never runs on a squid that already has one. * A rate-limited account is reported as temporarily locked, not missing — these locks are routine and clear on their own. Call `attach_account` directly when you want to add, switch, or confirm an account before running — for example, re-running an existing squid with a different account than the one that was auto-picked. See [Link Account to Squid](/docs/link-account-to-squid) for how account linking works at the API level. ## A typical conversation 1. *"Find a scraper for Google Maps business leads."* → `search_scrapers` 2. *"What inputs does it need?"* → `get_scraper_details` 3. *"Run it for dentists in Manchester."* → `run_scraper` (asks you to confirm) 4. *"Is it done?"* → `get_run` 5. *"Show me the results."* → `get_results` ## Troubleshooting **The client can't authorize / the connection fails.** The server must be reached over HTTPS at `https://mcp.lobstr.io/mcp`. Make sure you copied the full URL including `/mcp`. **Every run asks for confirmation.** Expected — lobstr.io prices per row, so the total is unknowable up front. The estimate still shows the per-row rate. **A run stays pending or errors.** Check the run in your [lobstr.io dashboard](https://app.lobstr.io); the MCP surfaces the same status your account shows. # Pagination Source: https://docs.lobstr.io/docs/pagination How to iterate through large result sets using the lobstr.io API All list endpoints return paginated responses. This guide explains the pagination model and how to fetch all records efficiently. ## Response structure Every paginated endpoint returns the same envelope: ```json theme={null} { "total_results": 243, "limit": 10, "page": 1, "total_pages": 25, "result_from": 1, "result_to": 10, "data": [...] } ``` | Field | Type | Description | | - | - | - | | `total_results` | integer | Total number of matching records | | `limit` | integer | Number of records per page (max 100) | | `page` | integer | Current page number (1-indexed) | | `total_pages` | integer | Total number of pages | | `result_from` | integer | Index of the first record on this page | | `result_to` | integer | Index of the last record on this page | | `data` | array | The records for this page | ## Parameters | Parameter | Default | Max | Description | | - | - | - | - | | `page` | `1` | — | Page number to retrieve | | `page_size` | `10` | `100` | Number of results per page | Pass these as query parameters: ```bash theme={null} GET /v1/results?squid=abc123&page=2&page_size=50 ``` The page-size query parameter's name varies by endpoint — Get Results uses `page_size`, while List Accounts uses `limit`. Check the specific endpoint's own page if you're unsure. ## Iterating through all pages ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" headers = {"Authorization": f"Token {API_KEY}"} def get_all_results(squid_id): all_data = [] page = 1 page_size = 100 while True: response = requests.get( "https://api.lobstr.io/v1/results", headers=headers, params={"squid": squid_id, "page": page, "page_size": page_size} ) body = response.json() all_data.extend(body["data"]) print(f"Fetched page {page}/{body['total_pages']} ({len(all_data)}/{body['total_results']} records)") if page >= body["total_pages"]: break page += 1 return all_data results = get_all_results("YOUR_SQUID_ID") print(f"Total records fetched: {len(results)}") ``` ```bash cURL theme={null} # Page 1 curl "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_ID&page=1&page_size=100" \ -H "Authorization: Token YOUR_API_KEY" # Page 2 curl "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_ID&page=2&page_size=100" \ -H "Authorization: Token YOUR_API_KEY" ``` ## Free plan limit On free plans, paginated endpoints cap results at a fixed limit regardless of `total_results`. When this cap is hit, the response includes a `warning` field: ```json theme={null} { "total_results": 500, "data": [...], "warning": "Export limit reached - only 50 results returned. Upgrade to premium to access the full dataset: https://app.lobstr.io/dashboard/pricing." } ``` Upgrade your plan to remove this restriction. ## Endpoints that support pagination | Endpoint | Path | | - | - | | List Squids | `GET /v1/squids` | | List Tasks | `GET /v1/tasks` | | List Runs | `GET /v1/runs` | | Get Run Tasks | `GET /v1/runs/{run_hash}/tasks` | | Get Results | `GET /v1/results` | | List Accounts | `GET /v1/accounts` | Use the maximum page size (`page_size=100` for Get Results; check each endpoint's own parameter name) to minimize the number of requests when fetching large datasets. # Pricing Source: https://docs.lobstr.io/docs/pricing Plan tiers and credit allowances lobstr.io runs on a credit system: every plan includes a monthly credit allowance, and each scraper run consumes credits based on the results and enrichment functions it uses. See [Get Balance](/docs/get-balance) to check your current credits and [Get Run Credits](/docs/get-run-credits) to see exactly how a specific run's credits were spent. Each scraper's own Credit Cost page documents what it charges, e.g. [Google Maps Leads Scraper](/examples/google-maps-leads-scraper/credit-cost). ## Plans | Plan | Monthly price | Annual price (billed yearly, 20% off) | Credits / month | Concurrent slots | Data retention | | - | - | - | - | - | - | | Free | \$0 | — | 100 | 1 | 7 days | | Starter | \$20 | \$192 | 10,000 | 2 | 28 days | | Pro | \$100 | \$960 | 100,000 | 10 | 28 days | | Team | \$500 | \$4,800 | 1,000,000 | 50 | 28 days | Need more than the Team plan offers? Custom/Enterprise pricing is available — contact us. See the full comparison and try the [pricing simulator](https://www.lobstr.io/pricing#simulator) to estimate credit usage for your use case. # Quickstart Source: https://docs.lobstr.io/docs/quickstart Go from zero to scraped data in minutes This guide walks through a complete workflow: pick a crawler, configure a squid, add tasks, run it, and download results — all via the API. ## Prerequisites You'll need an API key. Find it in your [lobstr.io dashboard](https://app.lobstr.io/dashboard/api) under **API** in the sidebar. Set it as an environment variable to use in the examples below: ```bash theme={null} export LOBSTR_API_KEY="your_api_key_here" ``` ## Step 1: Verify your credentials Confirm your key is working before proceeding. ```python Python theme={null} import requests,os API_KEY = os.environ["LOBSTR_API_KEY"] headers = {"Authorization": f"Token {API_KEY}"} response = requests.get("https://api.lobstr.io/v1/me", headers=headers) user = response.json() print(f"Logged in as: {user['first_name']} {user['last_name']} ({user['email']})") ``` ## Step 2: Find a crawler Crawlers define what site you're scraping. List available crawlers and pick the one you need. ```python Python theme={null} response = requests.get("https://api.lobstr.io/v1/crawlers", headers=headers) crawlers = response.json() for crawler in crawlers: print(f"{crawler['id']} {crawler['name']}") ``` Note the `id` of the crawler you want to use. For example, the Google Maps Reviews crawler. ## Step 3: Create a squid A squid is your configured scraping project — it ties together a crawler, your settings, and your tasks. ```python Python theme={null} payload = { "name": "My first squid", "crawler": "CRAWLER_ID" # from Step 2 } response = requests.post( "https://api.lobstr.io/v1/squids", headers={**headers, "Content-Type": "application/json"}, json=payload ) squid = response.json() squid_id = squid["id"] print(f"Squid created: {squid_id}") # A squid isn't ready to run until you've configured its params at # least once, even if you're keeping every default value as-is. requests.post( f"https://api.lobstr.io/v1/squids/{squid_id}", headers={**headers, "Content-Type": "application/json"}, json={"params": {}} ) ``` `runs.start()` will fail with `SquidNotReady` if you skip the settings update above, even when you don't want to change anything from the crawler's defaults — a squid isn't considered ready to run until its `params` have been explicitly submitted at least once. See [Update Squid](/docs/update-squid). ## Step 4: Add tasks Tasks tell the squid what to scrape — typically URLs or search queries. The accepted keys depend on the crawler (use [Get Crawler Parameters](/docs/get-crawler-parameters) to check). ```python Python theme={null} payload = { "squid": squid_id, "tasks": [ {"url": "https://maps.google.com/?cid=1234567890"}, {"url": "https://maps.google.com/?cid=0987654321"} ] } response = requests.post( "https://api.lobstr.io/v1/tasks", headers={**headers, "Content-Type": "application/json"}, json=payload ) result = response.json() print(f"Added {len(result['tasks'])} tasks ({result['duplicated_count']} duplicates skipped)") ``` ## Step 5: Start a run A run executes all pending tasks in the squid. ```python Python theme={null} payload = {"squid": squid_id} response = requests.post( "https://api.lobstr.io/v1/runs", headers={**headers, "Content-Type": "application/json"}, json=payload ) run = response.json() run_id = run["id"] print(f"Run started: {run_id}") ``` ## Step 6: Poll until complete Check the run status periodically until it reaches a terminal state. ```python Python theme={null} import time terminal_statuses = {"done", "aborted", "error"} while True: response = requests.get(f"https://api.lobstr.io/v1/runs/{run_id}", headers=headers) run = response.json() status = run["status"] print(f"Status: {status} — {run['total_results']} results so far") if status in terminal_statuses: print(f"Run finished: {run['done_reason']}") break time.sleep(10) ``` Typical runs complete in seconds to a few minutes depending on task count and concurrency. Avoid polling more frequently than every 5 seconds. ## Step 7: Download results Once the run is `done`, fetch your data. ```python Python theme={null} response = requests.get( "https://api.lobstr.io/v1/results", headers=headers, params={"squid": squid_id, "limit": 100, "page": 1} ) data = response.json() print(f"Total results: {data['total_results']}") for row in data["data"]: print(row) ``` For large datasets, iterate through pages using the `page` parameter. See the [Pagination guide](/docs/pagination) for details. ## Complete example ```python Python theme={null} import os, time, requests API_KEY = os.environ["LOBSTR_API_KEY"] CRAWLER_ID = "YOUR_CRAWLER_ID" headers = {"Authorization": f"Token {API_KEY}"} json_headers = {**headers, "Content-Type": "application/json"} # Create squid squid = requests.post( "https://api.lobstr.io/v1/squids", headers=json_headers, json={"name": "Quickstart squid", "crawler": CRAWLER_ID} ).json() squid_id = squid["id"] # Configure params (required before starting a run, even with no changes) requests.post( f"https://api.lobstr.io/v1/squids/{squid_id}", headers=json_headers, json={"params": {}} ) # Add tasks requests.post( "https://api.lobstr.io/v1/tasks", headers=json_headers, json={"squid": squid_id, "tasks": [{"url": "https://example.com"}]} ) # Start run run_id = requests.post( "https://api.lobstr.io/v1/runs", headers=json_headers, json={"squid": squid_id} ).json()["id"] # Poll until done while True: run = requests.get(f"https://api.lobstr.io/v1/runs/{run_id}", headers=headers).json() if run["status"] in {"done", "aborted", "error"}: break time.sleep(10) # Fetch results results = requests.get( "https://api.lobstr.io/v1/results", headers=headers, params={"squid": squid_id, "page_size": 100, "page": 1} ).json() print(f"Done — {results['total_results']} results collected") ``` # Rate Limiting Source: https://docs.lobstr.io/docs/rate-limiting Understanding API rate limits and how to handle them The lobstr.io API enforces rate limits to ensure fair usage and stable service performance. When you exceed the rate limit, the API returns a 429 Too Many Requests response. ## Rate Limit Headers Every API response includes headers to help you track your rate limit usage: | Header | Description | | - | - | | **X-RateLimit-Limit** | Total requests allowed per minute | | **X-RateLimit-Remaining** | Number of requests remaining in the current rate limit window | | **X-RateLimit-Reset** | UNIX timestamp indicating when the rate limit window resets | | **Retry-After** | Seconds until you can retry after hitting the limit | ## Endpoint-Specific Limits Different endpoints have different rate limits based on their resource intensity: | Endpoint | Limit | | - | - | | /v1/squids | 120 requests/minute | | /v1/tasks | 90 requests/minute | | /v1/runtasks | 90 requests/minute | | /v1/runs | 120 requests/minute | | /v1/results | 2 requests/second | ## Rate Limit Error Response When you exceed the rate limit, you'll receive a 429 response: ```json theme={null} { "error": "Rate limit exceeded. Please try again later.", "type": "RateLimitExceeded", "code": 429 } ``` ## Example Response Headers ``` X-RateLimit-Limit: 120 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1716909300 Retry-After: 45 ``` Monitor the X-RateLimit-Remaining header to proactively slow down requests before hitting the limit. The /v1/results endpoint has a stricter limit (2 req/sec) due to the data-intensive nature of result retrieval. Repeatedly hitting rate limits may result in temporary IP blocks. Implement exponential backoff in your code. Use the Retry-After header value to know exactly when to retry your request. ## Code Examples ```bash cURL theme={null} curl -i -X GET "https://api.lobstr.io/v1/results" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import time import requests headers = { "Authorization": "Token YOUR_API_KEY" } def request_with_retry(url, max_retries=5): for attempt in range(max_retries): response = requests.get(url, headers=headers) if response.status_code == 429: retry_after = int( response.headers.get("Retry-After", 2 ** attempt) ) print(f"Rate limited. Retrying in {retry_after}s...") time.sleep(retry_after) continue return response raise Exception("Max retries exceeded") ``` ## Response ```json 429 theme={null} { "error": "Rate limit exceeded. Please try again later.", "type": "RateLimitExceeded", "code": 429 } ``` # Refresh Cookies Source: https://docs.lobstr.io/docs/refresh-cookies POST https://api.lobstr.io/v1/accounts/cookies Update and re-synchronize cookies for an existing account This endpoint updates and synchronizes cookies for an existing account using its account hash. Use this when your account cookies have expired or need to be refreshed. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body Existing account hash to update. Example: `"abfeb440ceccdfab974e8d261836c9d6"` Account type identifier. Example: `"twitter-sync"` Object containing updated cookie name-value pairs. Example: `{"auth_token": "...", "ct0": "..."}` ## Response Field Explanations Synchronization task identifier. Example: `"7966b678b6b63ef599deeea99cb2b219"` Always "synchronize-cookies". Example: `"synchronize-cookies"` Task status code (100 = created). Example: `100` Human-readable status. Example: `"created"` Refresh cookies immediately when you notice status\_code\_info showing 'cookies\_expired' in List Accounts or Get Account Details. Use the returned task ID with Check Sync Status to monitor the refresh process. Refreshing cookies preserves all account settings and limits. You don't need to reconfigure the account after refresh. Set up monitoring to check account status regularly and automate cookie refresh when needed. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/accounts/cookies" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "account": "abfeb440ceccdfab974e8d261836c9d6", "type": "twitter-sync", "cookies": { "auth_token": "", "ct0": "" } }' ``` ```python Python theme={null} import requests import time url = "https://api.lobstr.io/v1/accounts/cookies" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } # Refresh cookies for an existing Twitter account payload = { "account": "abfeb440ceccdfab974e8d261836c9d6", # Existing account hash "type": "twitter-sync", "cookies": { "auth_token": "", "ct0": "" } } response = requests.post(url, headers=headers, json=payload) data = response.json() print(f"Refresh task created: {data['id']}") print(f"Status: {data['status_text']}") # Poll for completion task_id = data['id'] while True: status_response = requests.get( f"https://api.lobstr.io/v1/synchronize/{task_id}", headers=headers ) status = status_response.json() if status['status_code'] == 200: print(f"\n✓ Cookies refreshed successfully!") break elif status['status_code'] >= 400: print(f"\n✗ Failed: {status['status_text']}") break print(f"Status: {status['status_text']}...") time.sleep(2) ``` ## Response ```json 200 theme={null} { "id": "7966b678b6b63ef599deeea99cb2b219", "object": "synchronize-cookies", "status_code": 100, "status_text": "created" } ``` ```json 400 theme={null} { "detail": "Invalid cookies or account type mismatch." } ``` ```json 404 theme={null} { "detail": "Account not found." } ``` # Resurrect Run Source: https://docs.lobstr.io/docs/resurrect-run POST https://api.lobstr.io/v1/runs/{run_key}/resurrect Reopen an aborted run and resume scraping from where it stopped Reopen an aborted run in place, resetting only the tasks that were interrupted back to `pending`. Tasks already marked `done` are untouched — the run picks up from where the abort cut it off rather than starting over. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters Hash ID of the aborted run to resurrect. Retrieve this from the [List Runs](/docs/list-runs) endpoint. ## Constraints * Only runs with `done_reason: "aborted"` can be resurrected. Any other completed run returns a `RunNotAborted` error. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/runs/RUN_HASH/resurrect" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} run_hash = "RUN_HASH" response = requests.post(f"{BASE_URL}/runs/{run_hash}/resurrect", headers=headers) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "RUN_HASH", "status": "PENDING", "is_done": false, "done_reason": null } ``` ## Error Responses ```json 400 RunNotAborted theme={null} { "error": "RunNotAborted", "message": "Only aborted runs can be resurrected." } ``` # Retry Run Task Source: https://docs.lobstr.io/docs/retry-run-task POST https://api.lobstr.io/v1/runs/{run_hash}/tasks/{task_hash}/retry Retry a single failed or skipped task within a completed run Retry a single task from a completed run without restarting the entire run. The task is reset to `pending` and the run relaunches to process it. Only one retry can be queued at a time per squid — no other run may be active. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Path Parameters Hash ID of the completed run. Retrieve this from the [List Runs](/docs/list-runs) endpoint. Hash ID of the task to retry. Retrieve this from the [Get Run Tasks](/docs/get-run-tasks) endpoint (`data[].task`). ## Constraints * The run must be **completed** (`is_done: true`). Retrying while the run is still active returns `RunInProgress`. * No other run may be **active** for the same squid. If one is, `ClusterBusy` is returned. * The run must not have already reached its **`max_unique_results_per_run` cap** — if it has, retrying won't scrape anything new and `RunCapReached` is returned. Launch a new run instead. * A **5-minute cooldown** applies between retries of the same task. Retrying too soon returns `RetryCooldown`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/runs/RUN_HASH/tasks/TASK_HASH/retry" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} run_hash = "RUN_HASH" task_hash = "TASK_HASH" response = requests.post(f"{BASE_URL}/runs/{run_hash}/tasks/{task_hash}/retry", headers=headers) data = response.json() print(f"Task status: {data['status']}") ``` ## Response ```json 200 theme={null} { "id": "RUNTASK_HASH", "status": "pending", "is_done": false, "has_errors": null, "errors": null, "done_reason": null, "ended_at": null, "params": { "url": "https://example.com/listing/123" } } ``` ## Error Responses ```json 400 RunInProgress theme={null} { "error": "RunInProgress", "message": "Cannot retry a task while the run is still active." } ``` ```json 400 ClusterBusy theme={null} { "error": "ClusterBusy", "message": "Another run is currently active for this squid." } ``` ```json 400 RunCapReached theme={null} { "error": "RunCapReached", "message": "This run already reached its max unique results limit (200); retrying won't scrape anything new. Launch a new run instead." } ``` ```json 400 RetryCooldown theme={null} { "error": "RetryCooldown", "message": "This task was retried too recently, please wait a few minutes." } ``` # Rotate API Key Source: https://docs.lobstr.io/docs/rotate-api-key POST https://api.lobstr.io/v1/me/rotate_token Atomically replace your API token with a newly generated one Generates a new API token and invalidates your current one in a single atomic operation. Use this to rotate credentials after exposure or as part of a regular security rotation policy. Your existing token stops working immediately. Update all integrations to the new token returned in the response before calling this endpoint. ## Headers Your current API authentication token. Value: `Token YOUR_API_KEY` ## Rate Limiting This endpoint is throttled to **10 requests per hour** per account. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/me/rotate_token" \ -H "Authorization: Token YOUR_CURRENT_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_CURRENT_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} response = requests.post(f"{BASE_URL}/me/rotate_token", headers=headers) data = response.json() new_token = data["token"] print(f"New token: {new_token}") # Update your stored token — the old one is now invalid ``` ## Response ```json 200 theme={null} { "token": "YOUR_NEW_API_KEY" } ``` # Python SDK Source: https://docs.lobstr.io/docs/sdk Official Python SDK for the lobstr.io API. Sync and async clients, typed models, auto-pagination, and full API coverage. ## Installation ```bash theme={null} pip install lobstrio-sdk ``` Both `LobstrClient` and `AsyncLobstrClient` with identical API surfaces. Dataclass models for every response — no raw dicts in the public API. Lazy `PageIterator` streams all pages on demand with `.iter()` method. Token resolved from explicit param, `LOBSTR_TOKEN` env, or `~/.config/lobstr/config.toml`. ## Authentication The SDK resolves your API token in this order: 1. **Explicit parameter** — `LobstrClient(token="your_token")` 2. **Environment variable** — `LOBSTR_TOKEN=your_token` 3. **CLI config file** — `~/.config/lobstr/config.toml` (written by the lobstr CLI on login) If `LOBSTR_TOKEN` is not set, the SDK silently falls back to the CLI config file — which may belong to a different account. There is no warning when the env var is absent. Always set `LOBSTR_TOKEN` explicitly in production environments. ```bash theme={null} export LOBSTR_TOKEN=your_api_key ``` ## Quick Start ```python theme={null} import time from lobstrio import LobstrClient # Token resolved from LOBSTR_TOKEN env var, then ~/.config/lobstr/config.toml. # Set LOBSTR_TOKEN explicitly in production — misnamed env vars fail silently. client = LobstrClient() # 1. Resolve crawler slug → id (create() requires the hash, not the slug) crawlers = client.crawlers.list() crawler = next(c for c in crawlers if c.slug == "google-maps-leads-scraper") # 2. Create a squid squid = client.squids.create(crawler=crawler.id, name="Restaurants Paris") # 3. Configure squid-level params — required before runs.start(), even when all # params are optional. Pass None for params you don't need to set. client.squids.update(squid.id, params={"language": "English (United States)", "max_results": 50}) # 4. Add tasks client.tasks.add(squid=squid.id, tasks=[ {"url": "https://www.google.com/maps/search/restaurants/@48.8566,2.3522,14z"} ]) # 5. Start run and stream progress def on_progress(stats): print(f" {stats.percent_done} — {stats.total_results} results, ETA {stats.eta}") run = client.runs.start(squid=squid.id) print(f"Run {run.id} started") run = client.runs.wait(run.id, callback=on_progress) # Shortcut: client.runs.call(squid=squid.id, callback=on_progress) does the # start + wait in one call. Add timeout= to either to bound the wait. print(f"Run complete — {run.total_results} results, {run.credit_used} credits used") # 6. Wait for export to be ready before fetching results while not run.export_done: time.sleep(3) run = client.runs.get(run.id) # 7. Iterate results (PageIterator yields one dict per result) for place in client.results.iter(squid=squid.id): print(f"{place['name']} — {place.get('score', 'N/A')}★ {place.get('phone', '')}") # 8. Clean up — delete the squid to free the slot client.squids.delete(squid.id) ``` ## API Reference ### User | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.me()` | GET | `/v1/me` | Get authenticated user profile | | `client.balance()` | GET | `/v1/user/balance` | Get current credit balance | **`Balance.available` is your plan's total allotment, not credits remaining.** Remaining credits = `available − consumed`. Example: `Balance(available=100, consumed=64)` means 36 credits left. ### Crawlers | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.crawlers.list()` | GET | `/v1/crawlers` | List all available crawlers | | `client.crawlers.get(hash)` | GET | `/v1/crawlers/{hash}` | Get crawler details by hash | | `client.crawlers.params(hash)` | GET | `/v1/crawlers/{hash}/params` | Get supported parameters for a crawler | | `client.crawlers.attributes(hash)` | GET | `/v1/crawlers/{hash}/attributes` | Get output attributes for a crawler | A `Crawler` has both `account` (bool — needs an account or not) and `account_type` (the account type slug it needs, e.g. `linkedin-sync`, `sales-nav-sync`, or `None` if it needs no account). Two crawlers for the same platform can need different account types, so match a connected account on `account_type`, not on the crawler's name. ### Squids | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.squids.create(crawler, name)` | POST | `/v1/squids` | Create a new squid for a crawler | | `client.squids.list()` | GET | `/v1/squids` | List all squids in your account | | `client.squids.get(hash)` | GET | `/v1/squids/{hash}` | Get squid details by hash | | `client.squids.update(hash, ..., accounts=[...])` | POST | `/v1/squids/{hash}` | Update squid settings, parameters, or the linked account list | | `client.squids.attach_accounts(hash, accounts, replace=False)` | GET + POST | `/v1/squids/{hash}` | Link one or more connected accounts to a squid without dropping the ones already there | | `client.squids.empty(hash)` | POST | `/v1/squids/{hash}/empty` | Remove all tasks from a squid | | `client.squids.delete(hash)` | DELETE | `/v1/squids/{hash}` | Permanently delete a squid | **Linking an account.** `accounts` on `update()` is a direct mirror of the API field, which is **full-replace** — sending it detaches any account not included, and leaving it unset (the default) leaves the squid's accounts untouched. `attach_accounts()` is the safe way to add one: it reads the squid's current accounts first and sends the union, so nothing already attached is dropped. Pass `replace=True` to set the list outright instead, including `[]` to detach everything. Both are available on `LobstrClient` and `AsyncLobstrClient`. The read and the write inside `attach_accounts()` are two separate requests, not atomic — a concurrent attach on the same squid between them can still drop one addition. ### Tasks | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.tasks.add(squid, tasks)` | POST | `/v1/tasks` | Add one or more tasks to a squid | | `client.tasks.list(squid)` | GET | `/v1/tasks` | List tasks for a squid | | `client.tasks.get(hash)` | GET | `/v1/tasks/{hash}` | Get a single task by hash | | `client.tasks.upload(squid, file)` | POST | `/v1/tasks/upload` | Bulk upload tasks from a file | | `client.tasks.upload_status(id)` | GET | `/v1/tasks/upload/{id}` | Check status of a bulk upload | | `client.tasks.delete(hash)` | DELETE | `/v1/tasks/{hash}` | Delete a task by hash | ### Runs | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.runs.start(squid)` | POST | `/v1/runs` | Start a new run and return the `Run` right away, without waiting | | `client.runs.call(squid, timeout=None, callback=None)` | POST + poll | `/v1/runs` | Start a run **and wait** for it to finish — returns the finished run. Combines `start()` + `wait()` | | `client.runs.list(squid)` | GET | `/v1/runs` | List all runs for a squid | | `client.runs.get(hash)` | GET | `/v1/runs/{hash}` | Get run details by hash | | `client.runs.stats(hash)` | GET | `/v1/runs/{hash}/stats` | Get statistics for a run | | `client.runs.tasks(hash)` | GET | `/v1/runtasks` | List tasks executed in a run | | `client.runs.abort(hash)` | POST | `/v1/runs/{hash}/abort` | Abort an in-progress run | | `client.runs.download_url(hash)` | GET | `/v1/runs/{hash}/download` | Get S3 download URL for run results | | `client.runs.download(hash, dest)` | GET | `/v1/runs/{hash}/download` | Download run results to a local file | | `client.runs.wait(hash, timeout=None, callback=None)` | — | — | Poll until the run completes; optional `callback(RunStats)` for progress. Pass `timeout` (seconds) to bound the wait | **`start()` vs `call()`.** `start()` launches a run and hands back the `Run` immediately — you poll its progress or come back to it later. `call()` launches a run and waits until it finishes, returning the finished `Run` (the same as `start()` followed by `wait()`). Both accept `timeout` on the waiting side. **Timeouts.** `wait()` and `call()` wait indefinitely by default (`timeout=None`). Set `timeout` to a number of seconds to give up waiting — a `RunTimeout` (a subclass of the built-in `TimeoutError`) is raised. The run is **not** aborted; it keeps running server-side, so you can re-attach later with `runs.wait(run_id)` or `runs.get(run_id)`. ```python theme={null} from lobstrio import RunTimeout try: run = client.runs.call(squid=squid.id, timeout=300) # give up after 5 min except RunTimeout as e: print(f"Still running — re-attach later with runs.wait('{e.run_id}')") ``` ### Results | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.results.list(squid)` | GET | `/v1/results` | Get first page of results for a squid | | `client.results.iter(squid)` | GET | `/v1/results` | Lazily iterate all result pages for a squid | ### Accounts | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.accounts.list()` | GET | `/v1/accounts` | List all connected accounts | | `client.accounts.get(hash)` | GET | `/v1/accounts/{hash}` | Get account details by hash | | `client.accounts.types()` | GET | `/v1/accounts/types` | List supported account types | | `client.accounts.sync(type, cookies)` | POST | `/v1/accounts/cookies` | Sync an account using cookies | | `client.accounts.delete(hash)` | DELETE | `/v1/accounts/{hash}` | Delete a connected account | An `Account` also carries `status`, `resets_in`, and `lock_time` — what a client needs to tell whether the account is healthy and available, or currently locked by a run on another squid, before picking it to attach. There is no attach call on `AccountsResource` itself; link an account to a squid with `client.squids.attach_accounts()` above. ### Delivery | SDK Method | HTTP | Endpoint | Description | | - | - | - | - | | `client.delivery.email(squid, ...)` | POST | `/v1/delivery` | Configure email delivery for a squid | | `client.delivery.google_sheet(squid, ...)` | POST | `/v1/delivery` | Configure Google Sheets delivery | | `client.delivery.s3(squid, ...)` | POST | `/v1/delivery` | Configure Amazon S3 delivery | | `client.delivery.webhook(squid, ...)` | POST | `/v1/delivery` | Configure webhook delivery | | `client.delivery.sftp(squid, ...)` | POST | `/v1/delivery` | Configure SFTP delivery | # Start Run Source: https://docs.lobstr.io/docs/start-run POST https://api.lobstr.io/v1/runs Initiate a new run for a specified squid This endpoint initiates a new run for a specified squid, starting the scraping process for all active tasks within that squid. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body The hash ID of the squid to run. Example: `"b6c56d18cb0046949461ba9ca278e8ad"` ## Response Field Explanations Unique identifier of the new run. Example: `"dd3473abe4cb41b683551e851edded94"` Always "run". Example: `"run"` The squid being executed. Example: `"b6c56d18cb0046949461ba9ca278e8ad"` Initial run status (typically "pending"). Example: `"pending"` Whether the run has completed (false for new runs). Example: `false` Run start timestamp. Example: `"2025-02-10T14:27:45Z"` Origin of the run ("user" for API-initiated runs). Example: `"user"` Save the returned run ID to track progress using Get Run or Get Run Stats endpoints. Ensure your squid has active tasks before starting a run, or the run will complete immediately with no results. Only one run can be active per squid at a time. Starting a new run while one is active will return an error. For crawlers requiring accounts (e.g., LinkedIn, Facebook), ensure you have synced accounts before starting a run. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/runs" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "b6c56d18cb0046949461ba9ca278e8ad" }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/runs" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "squid": "b6c56d18cb0046949461ba9ca278e8ad" } response = requests.post(url, headers=headers, json=payload) run = response.json() print(f"Run started successfully!") print(f"Run ID: {run['id']}") print(f"Status: {run['status']}") print(f"Started at: {run['started_at']}") # Save run ID for tracking progress run_id = run['id'] print(f"\nUse run ID '{run_id}' to track progress with Get Run Stats endpoint") ``` ## Response ```json 200 theme={null} { "id": "dd3473abe4cb41b683551e851edded94", "object": "run", "squid": "b6c56d18cb0046949461ba9ca278e8ad", "is_done": false, "started_at": "2025-02-10T14:27:45Z", "total_results": 0, "total_unique_results": 0, "next_launch_at": null, "ended_at": null, "duration": 0, "credit_used": 0, "origin": "user", "force_launch": false, "status": "pending", "export_done": null, "export_count": 0, "export_time": null, "email_done": null, "email_time": null, "created_at": "2025-02-10T14:27:45Z", "done_reason": null, "done_reason_desc": null } ``` ```json 400 theme={null} { "error": { "message": "A run is already active for this squid", "type": "validation_error", "param": "squid" } } ``` # Sync Account Source: https://docs.lobstr.io/docs/sync-account POST https://api.lobstr.io/v1/accounts/cookies Synchronize cookies for a platform account to enable authenticated scraping This endpoint allows you to synchronize cookies for a specific platform account type. It accepts a JSON payload containing the account type and required cookie values, and returns a task ID to track the synchronization process. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body Account type identifier (e.g., twitter-sync, facebook-sync). Example: `"twitter-sync"` Object containing required cookie name-value pairs. Example: `{"auth_token": "...", "ct0": "..."}` ## Response Field Explanations Synchronization task identifier. Example: `"984e0a7996aeae956793b8967cd3e122"` Always "synchronize-cookies". Example: `"synchronize-cookies"` Task status code (100 = created). Example: `100` Human-readable status. Example: `"created"` Use browser developer tools to extract cookies. Open DevTools → Application → Cookies, and copy the required cookie values. The returned task ID can be used with the Check Sync Status endpoint to monitor synchronization progress. Ensure cookies are fresh and valid. Expired or invalid cookies will result in synchronization failure. Use List Account Types endpoint first to discover which cookies are required for each platform. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/accounts/cookies" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "twitter-sync", "cookies": { "auth_token": "", "ct0": "" } }' ``` ```python Python theme={null} import requests import time url = "https://api.lobstr.io/v1/accounts/cookies" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } # Synchronize Twitter cookies payload = { "type": "twitter-sync", "cookies": { "auth_token": "", "ct0": "" } } response = requests.post(url, headers=headers, json=payload) data = response.json() print(f"Sync task created: {data['id']}") print(f"Status: {data['status_text']}") # Poll for completion task_id = data['id'] while True: status_response = requests.get( f"https://api.lobstr.io/v1/synchronize/{task_id}", headers=headers ) status = status_response.json() if status['status_code'] == 200: print(f"\n✓ Synchronized! Account hash: {status['account_hash']}") break elif status['status_code'] >= 400: print(f"\n✗ Failed: {status['status_text']}") break print(f"Status: {status['status_text']}...") time.sleep(2) ``` ## Response ```json 200 theme={null} { "id": "984e0a7996aeae956793b8967cd3e122", "object": "synchronize-cookies", "status_code": 100, "status_text": "created" } ``` ```json 400 theme={null} { "detail": "Invalid account type or missing required cookies." } ``` ```json 401 theme={null} { "detail": "Invalid token." } ``` # Test Delivery Configuration Source: https://docs.lobstr.io/docs/test-delivery POST https://api.lobstr.io/v1/delivery/test-webhook Verify delivery configurations before activating them Test endpoints allow you to verify your delivery configurations work correctly before activating automatic delivery. Each delivery method has its own distinct endpoint — there is no shared endpoint with a channel query parameter. ### Available Test Endpoints | Endpoint | Route | Purpose | | - | - | - | | **Test Email** | /v1/delivery/test-email | Verify email address can receive notifications | | **Test Google Sheet** | /v1/delivery/test-googlesheet | Verify sheet permissions and accessibility | | **Test Webhook** | /v1/delivery/test-webhook | Verify webhook endpoint is reachable and responding | | **Test Amazon S3** | /v1/delivery/test-s3 | Verify S3 bucket permissions and credentials | | **Test SFTP** | /v1/delivery/test-sftp | Verify SFTP server connectivity and credentials | ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Test Email - Request Body Email address to test. Example: `"user@example.com"` ## Test Google Sheet - Request Body Google Sheet URL to test permissions. Example: `"https://docs.google.com/spreadsheets/d/1ly9nwTs-hNaFCzWtSljevSf16chs5Nn0PIv_TpQSEhA/edit?usp=sharing"` ## Test Webhook - Request Body Webhook endpoint URL to test. Example: `"https://your-webhook.com/endpoint"` ## Test Amazon S3 - Request Body S3 bucket name to test. Example: `"my-bucket"` (Optional) AWS Access Key for authentication. Example: `"AKIAIOSFODNN7EXAMPLE"` (Optional) AWS Secret Key for authentication. Example: `"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"` ## Test SFTP - Request Body SFTP server hostname or IP. Example: `"sftp.example.com"` SFTP server port. Example: `22` SFTP username. Example: `"user"` SFTP password. Example: `"password"` Target directory path. Example: `"/upload/path"` Always test your delivery configuration before activating automatic delivery to catch permission or connectivity issues early. Test endpoints do not require a squid parameter - they only verify that your credentials and endpoints work. A successful test response (success: true) means the configuration is valid, but doesn't guarantee future deliveries will succeed if permissions change. For webhook tests, check the status\_code field to ensure your endpoint returns 200/201/202 as expected. Test endpoints use the same validation logic as the actual delivery system, so a successful test is a reliable indicator. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/delivery/test-webhook" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-webhook.com/endpoint" }' ``` ```python Python theme={null} import requests # Test webhook endpoint url = "https://api.lobstr.io/v1/delivery/test-webhook" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "url": "https://your-webhook.com/endpoint" } response = requests.post(url, headers=headers, json=payload) result = response.json() print("Webhook test completed!") print(f"Success: {result['success']}") if 'status_code' in result: print(f"Status code: {result['status_code']}") ``` ## Response ```json 200 theme={null} { "success": true, "status_code": 200 } ``` # Supported Timezones Source: https://docs.lobstr.io/docs/timezones Full list of timezone values accepted by fetch_since_timezone The `fetch_since_timezone` parameter accepts any IANA timezone name from the list below. Use these values when setting an absolute date in `fetch_since` (e.g. `"2026-01-15 09:00"`). `fetch_since_timezone` is only applied when `fetch_since` is an **absolute date** (`YYYY-MM-DD HH:MM`). It is ignored for relative values like `"24h"` or `"7d"`. ## Africa `Africa/Abidjan` `Africa/Accra` `Africa/Addis_Ababa` `Africa/Algiers` `Africa/Asmara` `Africa/Bamako` `Africa/Bangui` `Africa/Banjul` `Africa/Bissau` `Africa/Blantyre` `Africa/Brazzaville` `Africa/Bujumbura` `Africa/Cairo` `Africa/Casablanca` `Africa/Ceuta` `Africa/Conakry` `Africa/Dakar` `Africa/Dar_es_Salaam` `Africa/Djibouti` `Africa/Douala` `Africa/El_Aaiun` `Africa/Freetown` `Africa/Gaborone` `Africa/Harare` `Africa/Johannesburg` `Africa/Juba` `Africa/Kampala` `Africa/Khartoum` `Africa/Kigali` `Africa/Kinshasa` `Africa/Lagos` `Africa/Libreville` `Africa/Lome` `Africa/Luanda` `Africa/Lubumbashi` `Africa/Lusaka` `Africa/Malabo` `Africa/Maputo` `Africa/Maseru` `Africa/Mbabane` `Africa/Mogadishu` `Africa/Monrovia` `Africa/Nairobi` `Africa/Ndjamena` `Africa/Niamey` `Africa/Nouakchott` `Africa/Ouagadougou` `Africa/Porto-Novo` `Africa/Sao_Tome` `Africa/Tripoli` `Africa/Tunis` `Africa/Windhoek` ## America `America/Adak` `America/Anchorage` `America/Anguilla` `America/Antigua` `America/Araguaina` `America/Argentina/Buenos_Aires` `America/Argentina/Catamarca` `America/Argentina/Cordoba` `America/Argentina/Jujuy` `America/Argentina/La_Rioja` `America/Argentina/Mendoza` `America/Argentina/Rio_Gallegos` `America/Argentina/Salta` `America/Argentina/San_Juan` `America/Argentina/San_Luis` `America/Argentina/Tucuman` `America/Argentina/Ushuaia` `America/Aruba` `America/Asuncion` `America/Atikokan` `America/Bahia` `America/Bahia_Banderas` `America/Barbados` `America/Belem` `America/Belize` `America/Blanc-Sablon` `America/Boa_Vista` `America/Bogota` `America/Boise` `America/Cambridge_Bay` `America/Campo_Grande` `America/Cancun` `America/Caracas` `America/Cayenne` `America/Cayman` `America/Chicago` `America/Chihuahua` `America/Costa_Rica` `America/Creston` `America/Cuiaba` `America/Curacao` `America/Danmarkshavn` `America/Dawson` `America/Dawson_Creek` `America/Denver` `America/Detroit` `America/Dominica` `America/Edmonton` `America/Eirunepe` `America/El_Salvador` `America/Fort_Nelson` `America/Fortaleza` `America/Glace_Bay` `America/Goose_Bay` `America/Grand_Turk` `America/Grenada` `America/Guadeloupe` `America/Guatemala` `America/Guayaquil` `America/Guyana` `America/Halifax` `America/Havana` `America/Hermosillo` `America/Indiana/Indianapolis` `America/Indiana/Knox` `America/Indiana/Marengo` `America/Indiana/Petersburg` `America/Indiana/Tell_City` `America/Indiana/Vevay` `America/Indiana/Vincennes` `America/Indiana/Winamac` `America/Inuvik` `America/Iqaluit` `America/Jamaica` `America/Juneau` `America/Kentucky/Louisville` `America/Kentucky/Monticello` `America/Kralendijk` `America/La_Paz` `America/Lima` `America/Los_Angeles` `America/Lower_Princes` `America/Maceio` `America/Managua` `America/Manaus` `America/Martinique` `America/Matamoros` `America/Mazatlan` `America/Menominee` `America/Merida` `America/Metlakatla` `America/Mexico_City` `America/Miquelon` `America/Moncton` `America/Monterrey` `America/Montevideo` `America/Montserrat` `America/Nassau` `America/New_York` `America/Nome` `America/Noronha` `America/North_Dakota/Beulah` `America/North_Dakota/Center` `America/North_Dakota/New_Salem` `America/Nuuk` `America/Ojinaga` `America/Panama` `America/Paramaribo` `America/Phoenix` `America/Port-au-Prince` `America/Port_of_Spain` `America/Porto_Velho` `America/Puerto_Rico` `America/Punta_Arenas` `America/Recife` `America/Regina` `America/Resolute` `America/Rio_Branco` `America/Santa_Isabel` `America/Santarem` `America/Santiago` `America/Santo_Domingo` `America/Sao_Paulo` `America/Scoresbysund` `America/Sitka` `America/St_Johns` `America/St_Kitts` `America/St_Lucia` `America/St_Thomas` `America/St_Vincent` `America/Swift_Current` `America/Tegucigalpa` `America/Thule` `America/Thunder_Bay` `America/Tijuana` `America/Toronto` `America/Tortola` `America/Vancouver` `America/Whitehorse` `America/Winnipeg` `America/Yakutat` `America/Yellowknife` ## Antarctica `Antarctica/Casey` `Antarctica/Davis` `Antarctica/DumontDUrville` `Antarctica/Macquarie` `Antarctica/Mawson` `Antarctica/McMurdo` `Antarctica/Palmer` `Antarctica/Rothera` `Antarctica/Syowa` `Antarctica/Troll` `Antarctica/Vostok` ## Arctic `Arctic/Longyearbyen` ## Asia `Asia/Aden` `Asia/Almaty` `Asia/Amman` `Asia/Anadyr` `Asia/Aqtau` `Asia/Aqtobe` `Asia/Ashgabat` `Asia/Atyrau` `Asia/Baghdad` `Asia/Bahrain` `Asia/Baku` `Asia/Bangkok` `Asia/Barnaul` `Asia/Beirut` `Asia/Bishkek` `Asia/Brunei` `Asia/Calcutta` `Asia/Chita` `Asia/Choibalsan` `Asia/Colombo` `Asia/Damascus` `Asia/Dhaka` `Asia/Dili` `Asia/Dubai` `Asia/Dushanbe` `Asia/Famagusta` `Asia/Gaza` `Asia/Hebron` `Asia/Ho_Chi_Minh` `Asia/Hong_Kong` `Asia/Hovd` `Asia/Irkutsk` `Asia/Istanbul` `Asia/Jakarta` `Asia/Jayapura` `Asia/Jerusalem` `Asia/Kabul` `Asia/Kamchatka` `Asia/Karachi` `Asia/Kathmandu` `Asia/Khandyga` `Asia/Kolkata` `Asia/Krasnoyarsk` `Asia/Kuala_Lumpur` `Asia/Kuching` `Asia/Kuwait` `Asia/Macau` `Asia/Magadan` `Asia/Makassar` `Asia/Manila` `Asia/Muscat` `Asia/Nicosia` `Asia/Novokuznetsk` `Asia/Novosibirsk` `Asia/Omsk` `Asia/Oral` `Asia/Phnom_Penh` `Asia/Pontianak` `Asia/Pyongyang` `Asia/Qatar` `Asia/Qostanay` `Asia/Qyzylorda` `Asia/Riyadh` `Asia/Sakhalin` `Asia/Samarkand` `Asia/Seoul` `Asia/Shanghai` `Asia/Singapore` `Asia/Srednekolymsk` `Asia/Taipei` `Asia/Tashkent` `Asia/Tbilisi` `Asia/Tehran` `Asia/Thimphu` `Asia/Tokyo` `Asia/Tomsk` `Asia/Ulaanbaatar` `Asia/Urumqi` `Asia/Ust-Nera` `Asia/Vientiane` `Asia/Vladivostok` `Asia/Yakutsk` `Asia/Yangon` `Asia/Yekaterinburg` `Asia/Yerevan` ## Atlantic `Atlantic/Azores` `Atlantic/Bermuda` `Atlantic/Canary` `Atlantic/Cape_Verde` `Atlantic/Faroe` `Atlantic/Madeira` `Atlantic/Reykjavik` `Atlantic/South_Georgia` `Atlantic/St_Helena` `Atlantic/Stanley` ## Australia `Australia/Adelaide` `Australia/Brisbane` `Australia/Broken_Hill` `Australia/Darwin` `Australia/Eucla` `Australia/Hobart` `Australia/Lindeman` `Australia/Lord_Howe` `Australia/Melbourne` `Australia/Perth` `Australia/Sydney` ## Europe `Europe/Amsterdam` `Europe/Andorra` `Europe/Astrakhan` `Europe/Athens` `Europe/Belgrade` `Europe/Berlin` `Europe/Bratislava` `Europe/Brussels` `Europe/Bucharest` `Europe/Budapest` `Europe/Busingen` `Europe/Chisinau` `Europe/Copenhagen` `Europe/Dublin` `Europe/Gibraltar` `Europe/Guernsey` `Europe/Helsinki` `Europe/Isle_of_Man` `Europe/Istanbul` `Europe/Jersey` `Europe/Kaliningrad` `Europe/Kiev` `Europe/Kirov` `Europe/Lisbon` `Europe/Ljubljana` `Europe/London` `Europe/Luxembourg` `Europe/Madrid` `Europe/Malta` `Europe/Mariehamn` `Europe/Minsk` `Europe/Monaco` `Europe/Moscow` `Europe/Nicosia` `Europe/Oslo` `Europe/Paris` `Europe/Podgorica` `Europe/Prague` `Europe/Riga` `Europe/Rome` `Europe/Samara` `Europe/San_Marino` `Europe/Sarajevo` `Europe/Saratov` `Europe/Simferopol` `Europe/Skopje` `Europe/Sofia` `Europe/Stockholm` `Europe/Tallinn` `Europe/Tirane` `Europe/Ulyanovsk` `Europe/Uzhgorod` `Europe/Vaduz` `Europe/Vatican` `Europe/Vienna` `Europe/Vilnius` `Europe/Volgograd` `Europe/Warsaw` `Europe/Zagreb` `Europe/Zaporozhye` `Europe/Zurich` ## Indian Ocean `Indian/Antananarivo` `Indian/Chagos` `Indian/Christmas` `Indian/Cocos` `Indian/Comoro` `Indian/Kerguelen` `Indian/Mahe` `Indian/Maldives` `Indian/Mauritius` `Indian/Mayotte` `Indian/Reunion` ## Pacific `Pacific/Apia` `Pacific/Auckland` `Pacific/Bougainville` `Pacific/Chatham` `Pacific/Chuuk` `Pacific/Easter` `Pacific/Efate` `Pacific/Enderbury` `Pacific/Fakaofo` `Pacific/Fiji` `Pacific/Funafuti` `Pacific/Galapagos` `Pacific/Gambier` `Pacific/Guadalcanal` `Pacific/Guam` `Pacific/Honolulu` `Pacific/Kiritimati` `Pacific/Kosrae` `Pacific/Kwajalein` `Pacific/Majuro` `Pacific/Marquesas` `Pacific/Midway` `Pacific/Nauru` `Pacific/Niue` `Pacific/Norfolk` `Pacific/Noumea` `Pacific/Pago_Pago` `Pacific/Palau` `Pacific/Pitcairn` `Pacific/Pohnpei` `Pacific/Port_Moresby` `Pacific/Rarotonga` `Pacific/Saipan` `Pacific/Tahiti` `Pacific/Tarawa` `Pacific/Tongatapu` `Pacific/Wake` `Pacific/Wallis` ## UTC / Other `UTC` `Etc/UTC` `Etc/GMT` `Etc/GMT+1` `Etc/GMT+2` `Etc/GMT+3` `Etc/GMT+4` `Etc/GMT+5` `Etc/GMT+6` `Etc/GMT+7` `Etc/GMT+8` `Etc/GMT+9` `Etc/GMT+10` `Etc/GMT+11` `Etc/GMT+12` `Etc/GMT-1` `Etc/GMT-2` `Etc/GMT-3` `Etc/GMT-4` `Etc/GMT-5` `Etc/GMT-6` `Etc/GMT-7` `Etc/GMT-8` `Etc/GMT-9` `Etc/GMT-10` `Etc/GMT-11` `Etc/GMT-12` `Etc/GMT-13` `Etc/GMT-14` # Update Account Limits Source: https://docs.lobstr.io/docs/update-account-limits POST https://api.lobstr.io/v1/accounts Configure account-specific operational limits for rate limiting and batch processing To update account-specific operational limits (like daily profile visits, search limits, or batch size), use this endpoint. The `params` object contains the updated values for batch size, daily limits per action, or time gaps between batches. ### Parameter Keys | Param Key | Type | Description | | - | - | - | | **batch** | integer | (Optional) Updated batch size per launch. Controls how many actions run per batch | | **batch\_hours** | integer | (Optional) Delay in hours between each batch run | | **\[attribute]** | integer | (Optional) Daily limit for the specific attribute like profiles, searches, or messages | ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body Account hash to update. Example: `"2372242060b59e03ac39f7691765bbf8"` Account type identifier. Example: `"sales-nav-sync"` Object containing limit parameters to update. Example: `{"batch": 20, "profiles": 150, "searches": 199, "batch_hours": 2}` ## Response Field Explanations Default account limits for this account type. Example: `{...}` User-configured limits with current usage tracking. Example: `{...}` Current batch count. Example: `0` Timestamp of last batch execution. Example: `"18/07/2022 21:47:09"` Current usage count for this attribute today. Example: `0` Unix timestamp when the daily counter resets. Example: `1716508800` Adjust batch and batch\_hours to control how aggressively your account scrapes. Lower values help avoid platform rate limits. Don't exceed the max values defined in the account type's default params. Higher limits may trigger anti-bot measures. The params.user object tracks real-time usage. Use it to monitor how close you are to daily limits. Set conservative limits initially and increase gradually based on your account's health and platform tolerance. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/accounts" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "account": "2372242060b59e03ac39f7691765bbf8", "type": "sales-nav-sync", "params": { "batch": 20, "profiles": 150, "searches": 199, "batch_hours": 2 } }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/accounts" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } # Update limits for a Sales Navigator account payload = { "account": "2372242060b59e03ac39f7691765bbf8", "type": "sales-nav-sync", "params": { "batch": 20, # Profiles per launch "profiles": 150, # Daily profile limit "searches": 199, # Daily search limit "batch_hours": 2 # Hours between batches } } response = requests.post(url, headers=headers, json=payload) data = response.json() print(f"Account: {data['username']}") print(f"Status: {data['status_code_info']}") print(f"\nUpdated limits:") user_params = data['params']['user'] print(f" Batch size: {user_params['batch']['max']}") print(f" Profiles/day: {user_params['profiles']['max']}") print(f" Searches/day: {user_params['searches']['max']}") print(f" Batch interval: {user_params['batch_hours']['max']} hours") ``` ## Response ```json 200 theme={null} { "id": "2372242060b59e03ac39f7691765bbf8", "object": "account", "username": "user@domain.com", "created_at": "2022-06-16T05:26:31Z", "last_synchronization_time": "2022-06-17T14:01:08Z", "status": "200", "status_code_info": "synchronized", "status_code_description": "Success!", "type": "sales-nav-sync", "params": { "default": { "batch": { "max": 20, "default": 20, "attribute": "profiles", "description": "Number of profiles visited per launch" }, "profiles": { "max": 150, "default": 150, "description": "Maximum number of profile requests per day" }, "searches": { "max": 200, "default": 200, "description": "Maximum number of searches per day" }, "batch_hours": { "max": 2, "default": 2, "description": "Hours between each launch during a day" } }, "user": { "batch": { "max": 20, "current": 0, "default": 20, "attribute": "profiles", "start_time": null, "last_batch_at": "18/07/2022 21:47:09" }, "profiles": { "max": 150, "value": 0, "default": 150, "timestamp": 1716508800, "start_time": null }, "searches": { "max": 199, "value": 0, "default": 200, "timestamp": 1716508800, "start_time": null }, "batch_hours": { "max": 2, "value": 0, "default": 2, "description": "Hours between each launch during a day" } } }, "updated_at": "2025-03-20T11:49:01Z", "account_type_hash": "cf67cafe03776e796f02a29f29ab2866", "squids": [], "baseurl": "https://www.linkedin.com", "cookies": [ {"name": "li_at", "required": true}, {"name": "JSESSIONID", "required": true}, {"name": "li_a", "required": true} ], "icon": "" } ``` ```json 400 theme={null} { "detail": "Invalid parameters. Check account hash and type." } ``` ```json 404 theme={null} { "detail": "Account not found." } ``` # Update Squid Source: https://docs.lobstr.io/docs/update-squid POST https://api.lobstr.io/v1/squids/{squid_hash} Update squid settings including parameters, concurrency, scheduling, and delivery integrations This endpoint updates an existing squid's settings using its hash ID. You can configure crawler parameters, execution settings, scheduling, notifications, and data delivery integrations. ### Squid Settings Display name for the squid. Example: `"My Custom Squid"` Enable (true) or disable (false) the squid. Example: `true` Number of concurrent tasks to run simultaneously (1-20). Example: `2` Stop after all tasks complete (true) or run until credits exhausted (false). Example: `false` Export only unique results, removing duplicates. Example: `true` Remove newlines from exported data. Example: `true` Notification preference: null (no notifications), "on\_success", or "on\_error". Example: `"on_success"` Cron expression for scheduling automated runs. Example: `"0 10 * * *"` Timezone identifier for schedule execution. Example: `"Europe/Paris"` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Path Parameters The unique identifier (hash) of the squid to update. Example: `e86b29c032024b66aff529e1d43c2bd7` The params object structure depends on the crawler. Use Get Crawler Parameters endpoint to see available options before updating. Optional function parameters (in params.functions) cost extra credits per row. Check the crawler details for pricing. Setting is\_active to false will prevent the squid from running. Use this to temporarily pause a squid without deleting it. You can update just one field at a time - send only the fields you want to change. Other settings remain unchanged. Use cron\_expression and timezone to schedule recurring runs. Common patterns: '0 9 \* \* \*' (daily at 9am), '0 0 \* \* 0' (weekly on Sunday). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Updated Squid Name", "concurrency": 2, "is_active": true, "params": { "max_results": 150, "functions": { "extract_emails_from_website": true, "collect_business_details": true, "fetch_business_images": false }, "ratings": "4.0+", "country": "United States", "language": "English (United States)" }, "run_notify": "on_success" }' ``` ```python Python theme={null} import requests squid_id = "e86b29c032024b66aff529e1d43c2bd7" url = f"https://api.lobstr.io/v1/squids/{squid_id}" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "name": "Updated Squid Name", "concurrency": 2, "is_active": True, "params": { "max_results": 150, "functions": { "extract_emails_from_website": True, "collect_business_details": True, "fetch_business_images": False }, "ratings": "4.0+", "country": "United States", "language": "English (United States)" }, "run_notify": "on_success" } response = requests.post(url, headers=headers, json=payload) result = response.json() print(f"Squid updated successfully!") print(f"Name: {result['name']}") print(f"Concurrency: {result.get('concurrency', 'N/A')}") print(f"Notifications: {result.get('run_notify', 'None')}") ``` ## Response ```json 201 theme={null} { "name": "Updated Squid Name", "no_line_breaks": true, "is_active": true, "params": { "max_results": 150, "functions": { "extract_emails_from_website": true, "collect_business_details": true, "fetch_business_images": false }, "ratings": "4.0+", "country": "United States", "language": "English (United States)" }, "to_complete": false, "run_notify": "on_success", "export_unique_results": true } ``` # Update Squid Chain Source: https://docs.lobstr.io/docs/update-squid-chain PATCH https://api.lobstr.io/v1/squids/{id}/chain Update the chain configuration for a squid Updates settings on an existing chain configuration. Only the fields you include in the request body are updated. If the target squid has already been created by a previous chain trigger, updating `cluster_concurrency` will apply the new value to that squid immediately. ## Path Parameters Hash ID of the source squid. Example: `"e86b29c032024b66aff529e1d43c2bd7"` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body Whether downstream runs start automatically on task queue. Update the name of the target squid. Update the concurrency of the target squid. ## Code Examples ```bash cURL theme={null} curl -X PATCH "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "autostart": false, "cluster_concurrency": 5 }' ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/squids/e86b29c032024b66aff529e1d43c2bd7/chain" headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json" } payload = { "autostart": False, "cluster_concurrency": 5 } response = requests.patch(url, headers=headers, json=payload) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "target_module": { "id": "9a3f1c8b2e7d4a56f0e1b2c3d4e5f678", "public_name": "Google Maps Reviews Scraper", "name": "googlemapreviews_matrix", "max_concurrency": 10 }, "target_cluster": { "id": "f7e8d9c0b1a2f7e8d9c0b1a2f7e8d9c0", "hash_value": "f7e8d9c0b1a2f7e8d9c0b1a2f7e8d9c0", "name": "Reviews (chained)" }, "field_map": {"url": "url"}, "is_active": true, "autostart": false, "cluster_name": "Reviews (chained)", "cluster_concurrency": 5, "created_at": "2026-04-28T10:00:00Z" } ``` ```json 404 theme={null} { "error": "No chain configured on this squid." } ``` # Upload Tasks Source: https://docs.lobstr.io/docs/upload-tasks POST https://api.lobstr.io/v1/tasks/upload Upload a CSV/TSV file containing multiple tasks for a squid This endpoint allows you to upload a file (CSV/TSV) containing multiple tasks for a specific squid. The file should contain task parameters in columns matching the crawler's expected keys. This is ideal for bulk task creation. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be multipart/form-data for file upload. Value: `multipart/form-data` ## Form Data Parameters CSV or TSV file containing task data. Column headers should match crawler parameter keys. Example: `tasks.csv` The hash ID of the squid to add tasks to. Example: `"a1b2c3d4e5f6g7h8i9j0"` ## Response Field Explanations Upload task identifier for tracking progress. Example: `"427a7bfc54cf4ce483d83ba23425164b"` Always "task\_upload". Example: `"task_upload"` Use the returned task ID with Check Upload Status to monitor the upload progress. CSV column headers must match the crawler's expected parameter keys (e.g., 'url', 'city', 'activity'). Large files may take time to process. Always check upload status before running the squid. TSV (tab-separated) files are also supported and may be easier to work with for URLs containing commas. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks/upload" \ -H "Authorization: Token YOUR_API_KEY" \ -F "file=@tasks.csv" \ -F "squid=a1b2c3d4e5f6g7h8i9j0" ``` ```python Python theme={null} import requests url = "https://api.lobstr.io/v1/tasks/upload" headers = { "Authorization": "Token YOUR_API_KEY" } # Prepare file upload with open("tasks.csv", "rb") as f: files = {"file": ("tasks.csv", f, "text/csv")} data = {"squid": "a1b2c3d4e5f6g7h8i9j0"} response = requests.post(url, headers=headers, files=files, data=data) result = response.json() upload_task_id = result['id'] print(f"Upload started with ID: {upload_task_id}") print("Use Check Upload Status endpoint to monitor progress") ``` ## Response ```json 200 theme={null} { "id": "427a7bfc54cf4ce483d83ba23425164b", "object": "task_upload" } ``` # Get User Profile Source: https://docs.lobstr.io/docs/user-me GET https://api.lobstr.io/v1/me Retrieve authenticated user's profile data including personal details, account status, and subscription information This endpoint returns the authenticated user's complete profile data in a single API call. Use it to verify authentication, retrieve user details, and check account status. This is typically the first endpoint you'll call after authentication to confirm your credentials are working correctly. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Content type of the request. Value: `application/json` ## Response Field Explanations User's first name. Example: `"John"` User's last name. Example: `"Doe"` User's email address. Example: `"user@example.com"` Whether the user's email address has been verified. Example: `true` List of active subscription plan objects for the user. Total number of times the user has logged in. Example: `42` URL of the user's profile image, or `null` if not set. Whether the user has staff/admin access. Example: `false` The user's credit reset interval (e.g., monthly billing cycle). Example: `"monthly"` Use this endpoint to verify your authentication is working before making other API calls. A successful response means your API key is valid. The response includes rate limit information in the headers. Check the `X-RateLimit-Remaining` header to monitor your API usage. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/me" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```python Python theme={null} import requests headers = { "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", } response = requests.get( "https://api.lobstr.io/v1/me", headers=headers ) print(response.json()) ``` ## Response ```json 200 theme={null} { "first_name": "John", "last_name": "Doe", "email": "user@example.com", "email_verified": true, "plan": [], "login_count": 42, "profile_image": null, "is_staff": false, "credit_interval": "monthly" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/amazon-reviews-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Amazon Reviews Scraper squid Add URLs or inputs to your **Amazon Reviews Scraper** squid. Each task object must include the required fields below. Crawler ID: `787abfafd394be3b12ee2ac7d14303fe` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/amazon-reviews-scraper/credit-cost Credit cost for the Amazon Reviews Scraper 1 credit per review. # Get Results Source: https://docs.lobstr.io/examples/amazon-reviews-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Amazon Reviews Scraper Retrieve scraped data from your **Amazon Reviews Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the Amazon customer review. Example: `R20VZPJE39ZA0O` Direct URL to the review on Amazon. Example: `https://www.amazon.com/gp/customer-reviews/R20VZPJE39ZA0O` Amazon product page URL. Example: `https://www.amazon.com/dp/B0D3V4T7K1` Amazon Standard Identification Number (ASIN) for the product. Example: `B0D3V4T7K1` Title or headline of the customer review. Example: `1.0 out of 5 stars Disappointing Read` Full text content of the customer review. Example: `It reads like AI wrote it. Sort paragraphs and the usage of bullet points is excessive. The book has minimal ideas repeated over and over again. It felt like a weird read so I tried to look up the author and other works and could not find much of anything about the author. There is only one blurry photo and no social media. Very disappointing.` Star rating given by the reviewer (1 to 5). Example: `1` Review date as displayed on Amazon (e.g. Reviewed in the United States on January 26, 2026). Example: `Reviewed in the United States on January 26, 2026` Review publication date in ISO 8601 format. Example: `2026-01-26T00:00:00.000Z` Whether the reviewer purchased the product on Amazon (Verified Purchase). Example: `true` Format or variant of the product reviewed (e.g. Paperback, Kindle Edition). Example: `Format: Paperback` Number of users who marked the review as helpful. Example: `3` List of image URLs attached to the customer review. Example: `['https://m.media-amazon.com/images/I/81jt3hLUmNL._SY88.jpg']` Display name of the reviewer on Amazon. Example: `Autumn Autumn` URL to the reviewer's Amazon profile page. Example: `https://www.amazon.com/gp/profile/amzn1.account.AFKX2WHZM2VJ7RP4XHRCJD7JXDXQ/ref=cm_cr_getr_d_gw_btm` URL of the reviewer's Amazon avatar image. Example: `https://m.media-amazon.com/images/S/amazon-avatars-global/default._CR0,0,1024,1024_SX48_.png` Total number of written reviews for the product on Amazon. Example: `128` Total number of ratings for the product (including those without a written review). Example: `169` Country where the review was posted (e.g. the United States). Example: `the United States` URL to the product's reviews listing page on Amazon. Example: `https://www.amazon.com/Talk-Anyone-Anytime-Anywhere-Communication/product-reviews/B0D3V4T7K1` Whether the review was submitted through the Amazon Vine program. Example: `false` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 26942, "object": "result", "squid": "79adf8711330a32e9a07e1748c362f5d", "run": "0ff156b7279b996ab65ab2d24a129a5c", "review_id": "R20VZPJE39ZA0O", "review_url": "https://www.amazon.com/gp/customer-reviews/R20VZPJE39ZA0O", "product_url": "https://www.amazon.com/dp/B0D3V4T7K1", "asin": "B0D3V4T7K1", "review_title": "1.0 out of 5 stars Disappointing Read", "review_text": "It reads like AI wrote it. Sort paragraphs and the usage of bullet points is excessive. The book has minimal ideas repeated over and over again. It felt like a weird read so I tried to look up the author and other works and could not find much of anything about the author. There is only one blurry photo and no social media. Very disappointing.", "review_rating": 1, "review_date": "Reviewed in the United States on January 26, 2026", "review_date_raw": "2026-01-26T00:00:00.000Z", "review_verified": true, "review_format": "Format: Paperback", "review_helpful_count": 3, "review_images": [ "https://m.media-amazon.com/images/I/81jt3hLUmNL._SY88.jpg" ], "author_name": "Autumn Autumn", "author_profile_url": "https://www.amazon.com/gp/profile/amzn1.account.AFKX2WHZM2VJ7RP4XHRCJD7JXDXQ/ref=cm_cr_getr_d_gw_btm", "author_avatar": "https://m.media-amazon.com/images/S/amazon-avatars-global/default._CR0,0,1024,1024_SX48_.png", "total_reviews": 128, "total_ratings": 169, "country": "the United States", "review_category_url": "https://www.amazon.com/Talk-Anyone-Anytime-Anywhere-Communication/product-reviews/B0D3V4T7K1", "is_amazon_vine": false, "functions": null, "native_id": 26942 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/amazon-reviews-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Amazon Reviews Scraper settings Configure your Amazon Reviews Scraper squid settings. Control how reviews are sorted, filtered, and limited. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **sort\_by** | string | recent | Sort order for reviews: `recent`, `top_reviews` | | **filter\_by\_star** | string | all\_stars | Filter by star rating: `all_stars`, `five_star`, `four_star`, `three_star`, `two_star`, `one_star`, `positive`, `critical` | | **reviewer\_type** | string | all\_reviewers | Filter by reviewer type: `all_reviewers`, `verified_purchase_only` | | **media\_type** | string | text\_image\_video | Filter by review media: `text_image_video`, `image_and_video_only` | | **format\_type** | string | all\_variants | Filter by product variant: `all_variants`, `current_format` | | **filter\_by\_keyword** | string | null | Only return reviews containing this keyword | | **max\_results** | integer | 100 | Maximum number of reviews to collect per product | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique reviews across all tasks in the run | | **scrape\_max\_reviews** | boolean | false | If true, attempt to collect all available reviews | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | This scraper requires a synced Amazon account. Add your Amazon cookies in the Accounts section before running. Use `filter_by_star: critical` to monitor negative feedback, or `sort_by: recent` combined with `fetch_since` to track new reviews. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Amazon Reviews Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "sort_by": "recent", "filter_by_star": "all_stars", "reviewer_type": "verified_purchase_only", "media_type": "text_image_video", "format_type": "all_variants", "max_results": 100, "fetch_since": "7d" } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Amazon Reviews Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "sort_by": "recent", "filter_by_star": "all_stars", "reviewer_type": "verified_purchase_only", "max_results": 100, "fetch_since": "7d" } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Amazon Reviews Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "sort_by": "recent", "filter_by_star": "all_stars", "reviewer_type": "verified_purchase_only", "max_results": 100, "fetch_since": "7d" } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/autoscout24-listings-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your AutoScout24 Listings Scraper squid Add URLs or inputs to your **AutoScout24 Listings Scraper** squid. Each task object must include the required fields below. Crawler ID: `0a09add2a3c455037a972db81b1c0219` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/autoscout24-listings-scraper/credit-cost Credit cost for the AutoScout24 Listings Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 1 | 1 credit per listing. | | Collect Listing Details | 4 | 4 credits per listing. | # Get Results Source: https://docs.lobstr.io/examples/autoscout24-listings-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from AutoScout24 Listings Scraper Retrieve scraped data from your **AutoScout24 Listings Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the vehicle listing on AutoScout24. Example: `22c73c4a-a00e-4efd-bfdf-c331d650a421` Direct URL to the vehicle listing on AutoScout24. Example: `https://www.autoscout24.com/offers/toyota-land-cruiser-2-8l-diesel-48v-executive-lager-diesel-grey-22c73c4a-a00e-4efd-bfdf-c331d650a421` Full listing title as shown on AutoScout24. Example: `2,8l Diesel 48V Executive LAGER` Secondary subtitle or short vehicle summary on AutoScout24. Example: `2,8l Diesel 48V Executive LAGER` Vehicle manufacturer or brand (e.g. BMW, Volkswagen). Example: `Toyota` Vehicle model name. Example: `Land Cruiser` Listed price of the vehicle. Example: `79950` ISO 3-letter currency code of the listed price. Example: `EUR` Odometer reading of the vehicle. Example: `5000` Type of fuel the vehicle uses (e.g. Petrol, Diesel, Electric). Example: `Diesel` Date of the vehicle's first registration. Example: `12/2025` Engine power including value and unit (e.g. 150 kW / 204 hp). Example: `151 kW (205 hp)` Type of seller (private individual or professional dealer). Example: `Dealer` Name of the individual or dealership selling the vehicle. Example: `Autohaus Geschw.Schneider GmbH` Location of the seller or vehicle on AutoScout24. Example: `Aalen` Postal code of the seller's location. Example: `73431` Full description text provided by the seller. Example: `Getriebe Automatik Technik Allrad Bordcomputer Sperrdifferential Partikelfilter Volldigitales Kombiinstrument Assistenten Totwinkel-Assistent Müdigkeitserkennung Verkehrszeichenerkennung Regensensor Fernlichtassistent Lichtsensor Notbremsassistent Berganfahrassistent Bergabfahrassistent Spurhalteassistent Abstandsregeltempomat Abstands-/Kollisionswarner Komfort Servolenkung Zentralverriegelung Elektrischer Fensterheber Lederausstattung Sitzheizung Elektrische Aussenspiegel Tempomat Multifunktionslenkrad Keyless Go Startfunktion Elektrische Sitze Innenspiegel autom. abblendbar Mittelarmlehne Innenraumfilter Lenksaeule einstellbar ParkDistanceControl vorne und hinten Elektrische Heckklappe Beheizbare Frontscheibe klimatisierte Sitze Keyless Entry Ambientebeleuchtung Lordosenstütze Lederlenkrad Geschwindigkeitsbegrenzungsanlage Klimaautomatik-3-Zonen Funkfernbedienung Sicht LED-Hauptscheinwerfer LED-Tagfahrlicht 360 Grad Kamera LED-Rueckleuchten Nebelscheinwerfer Scheinwerferregulierung Scheinwerferreinigung Privacyverglasung Sicherheit ABS Airbag Beifahrer-Airbag Wegfahrsperre Seitenairbags Alarmanlage ESP Antriebsschlupfregelung Reifendruckkontrolle Traktionskontrolle Kopfairbag Knieairbag Notrufsystem Pannenkit Notrad Airbag hinten Entertainment Navigationssystem Radio Telefonvorbereitung USB-Anschluss Bluetooth Freisprecheinrichtung Apple CarPlay Android Auto Sprachsteuerung DAB Touchscreen Induktionsladen für Smartphones Umwelt Grüne Umweltplakette Qualität Garantie Nichtraucherfahrzeug Sonstiges Metallic Alufelgen Dachreling Lenkradheizung Sommerreifen Gepäckraumabtrennung` Contact phone number of the seller. Example: `+497361930114` Formatted price label shown on the listing (e.g. Fixed price, Negotiable) Type of gearbox (e.g. Manual, Automatic). Example: `Automatic` Body style of the vehicle (e.g. Sedan, SUV, Hatchback, Convertible). Example: `SUV/Off-Road/Pick-Up` Number of doors on the vehicle. Example: `5` Number of seats in the vehicle. Example: `5` Engine displacement in cubic centimetres (cc). Example: `2755` Number of engine cylinders. Example: `4` Unladen weight of the vehicle in kilograms European emission standard class of the vehicle (e.g. Euro 6). Example: `Euro 6d` German emissions sticker (Umweltplakette) category. Example: `4 (Green)` Fuel consumption figures (e.g. combined, city, highway) Drivetrain configuration (e.g. Front-wheel drive, All-wheel drive). Example: `4WD` Number of previous registered owners of the vehicle. Example: `1` Status of the vehicle's technical inspection (e.g. TÜV in Germany). Example: `11/2028` Date of the vehicle's last service or maintenance Production or manufacture date of the vehicle List of standard and optional equipment included with the vehicle. Example: `['360° camera', 'Air conditioning', 'Armrest', 'Automatic climate control, 3 zones', 'Cruise control', 'Electric tailgate', 'Electrical side mirrors', 'Electrically adjustable seats', 'Electrically heated windshield', 'Heated steering wheel', 'Hill Holder', 'Keyless central door lock', 'Leather seats', 'Leather steering wheel', 'Light sensor', 'Lumbar support', 'Multi-function steering wheel', 'Navigation system', 'Park Distance Control', 'Parking assist system camera', 'Parking assist system sensors front', 'Parking assist system sensors rear', 'Power windows', 'Rain sensor', 'Seat heating', 'Seat ventilation', 'Tinted windows', 'Android Auto', 'Apple CarPlay', 'Bluetooth', 'Digital cockpit', 'Digital radio', 'Hands-free equipment', 'Induction charging for smartphones', 'On-board computer', 'Radio', 'USB', 'ABS', 'Adaptive Cruise Control', 'Alarm system', 'Bi-Xenon headlights', 'Blind spot monitor', 'Central door lock', 'Central door lock with remote control', 'Daytime running lights', 'Distance warning system', 'Driver drowsiness detection', 'Driver-side airbag', 'Electronic stability control', 'Emergency brake assistant', 'Emergency system', 'Fog lights', 'Full-LED headlights', 'Head airbag', 'High beam assist', 'Immobilizer', 'Lane departure warning system', 'LED Daytime Running Lights', 'LED Headlights', 'Passenger-side airbag', 'Power steering', 'Rear airbag', 'Side airbag', 'Speed limit control system', 'Tire pressure monitoring system', 'Traction control', 'Traffic sign recognition', 'Xenon headlights', 'Alloy wheels', 'Ambient lighting', 'Automatically dimming interior mirror', 'Cargo barrier', 'Emergency tyre', 'Emergency tyre repair kit', 'Headlight washer system', 'Particle filter', 'Roof rack', 'Summer tyres', 'Touch screen', 'Voice Control']` Exterior colour of the vehicle. Example: `Grey` Official colour name used by the manufacturer. Example: `Dark grey` Type of paint finish (e.g. Metallic, Solid, Pearl). Example: `Metallic` Type of interior upholstery (e.g. Leather, Fabric, Alcantara). Example: `Full leather` Colour of the interior upholstery. Example: `Black` Version or trim level of the vehicle. Example: `2,8l Diesel 48V Executive LAGER` List of all vehicle image URLs from the listing. Example: `['https://prod.pictures.autoscout24.net/listing-images/22c73c4a-a00e-4efd-bfdf-c331d650a421_f740629d-2f21-4368-9477-27f443e6ee95.jpg/1920x1080.webp', 'https://prod.pictures.autoscout24.net/listing-images/22c73c4a-a00e-4efd-bfdf-c331d650a421_32e930da-99a2-4d00-a82d-66ee49356683.jpg/1920x1080.webp']` Total number of images in the listing. Example: `9` Category of vehicle (e.g. Car, Motorcycle, Truck, Van). Example: `Car` Country where the vehicle is listed for sale. Example: `DE` Position of the listing in the search results. Example: `4` Date the listing was first published on AutoScout24. Example: `2026-03-22T13:00:19+00:00` Date and time the listing was published on AutoScout24 (UTC), as reported by AutoScout24 itself. Only available when `get_listing_details` is enabled. AutoScout24's price evaluation band for this listing, from 0 (far below the market median) to 6 (far above it). Empty when AutoScout24 has no comparable vehicles to rate this listing against. AutoScout24's own wording for the price evaluation, in the language of the searched AutoScout24 domain. AutoScout24 only publishes a label for its three "good deal" bands (`price_rating` 1, 2 and 3). Whether VAT on this price is deductible (TVA récupérable), as declared by the seller. The price bands AutoScout24 computed for this vehicle's market cohort: one entry per `price_rating` band, with its minimum and maximum price. Empty when AutoScout24 has no comparable vehicles. Whether the seller declared the vehicle as accident-damaged. Empty when the seller did not answer: an empty value means unknown, not "no accident". Whether the seller declared a complete service history. Empty when the seller did not answer. Whether the seller declared the vehicle as non-smoking. Empty when the seller did not answer. Whether the seller declared the cabin as clean/undamaged. Empty when the seller did not answer. Equipment AutoScout24 files under Safety & Security, in the language of the searched AutoScout24 domain. Subset of the flat `equipment` list. Equipment AutoScout24 files under Comfort & Convenience. Subset of the flat `equipment` list. Equipment AutoScout24 files under Entertainment & Media. Subset of the flat `equipment` list. Equipment AutoScout24 files under Extras. Subset of the flat `equipment` list. The seller's second phone number, when they published more than one. Empty when the seller only published one number. The kind of line `phone_2` is, as labelled by the seller (e.g. `Office`, `Mobile`). AutoScout24's customer id for the dealer selling this vehicle. Stable across all of that dealer's listings. Empty for private sellers. URL of the dealer's own AutoScout24 profile page. Empty for private sellers. The year the dealer became an AutoScout24 customer. AutoScout24 only publishes the year, not a full date. Empty for private sellers. Combined CO2 emissions in g/km, exactly as AutoScout24 publishes them. Empty when AutoScout24 reports no value. AutoScout24 returns a literal `0` for a share of combustion-engine listings — see `co2_is_estimated`. True when the CO2 figure should not be read as a measurement. Carries AutoScout24's own "fallback estimate" flag, and is also set when `co2_emissions` is 0 while AutoScout24 itself describes the vehicle as a combustion engine. Latitude of the vehicle's location, as published by AutoScout24. Only available when `get_listing_details` is enabled. Longitude of the vehicle's location, as published by AutoScout24. Only available when `get_listing_details` is enabled. The dealer's average customer rating on AutoScout24, out of 5. Empty when the dealer has no ratings yet — a dealer nobody has rated is never reported as a 0. How many customer reviews the dealer has on AutoScout24. `0` is a real value here: the dealer has no reviews. Share of the dealer's reviewers who recommend them, in percent. Empty when the dealer has no ratings yet. ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 65046, "object": "result", "squid": "b860b503c80b2095722270c797a3693e", "run": "65c5caa0c610093f78f14d8c44436c86", "listing_id": "22c73c4a-a00e-4efd-bfdf-c331d650a421", "url": "https://www.autoscout24.com/offers/toyota-land-cruiser-2-8l-diesel-48v-executive-lager-diesel-grey-22c73c4a-a00e-4efd-bfdf-c331d650a421", "title": "2,8l Diesel 48V Executive LAGER", "subtitle": "2,8l Diesel 48V Executive LAGER", "make": "Toyota", "model": "Land Cruiser", "price": 79950, "currency": "EUR", "mileage": 5000, "fuel_type": "Diesel", "first_registration": "12/2025", "power": "151 kW (205 hp)", "seller_type": "Dealer", "seller_name": "Autohaus Geschw.Schneider GmbH", "location": "Aalen", "postal_code": "73431", "description": "Getriebe Automatik Technik Allrad Bordcomputer Sperrdifferential Partikelfilter Volldigitales Kombiinstrument Assistenten Totwinkel-Assistent Müdigkeitserkennung Verkehrszeichenerkennung Regensensor Fernlichtassistent Lichtsensor Notbremsassistent Berganfahrassistent Bergabfahrassistent Spurhalteassistent Abstandsregeltempomat Abstands-/Kollisionswarner Komfort Servolenkung Zentralverriegelung Elektrischer Fensterheber Lederausstattung Sitzheizung Elektrische Aussenspiegel Tempomat Multifunktionslenkrad Keyless Go Startfunktion Elektrische Sitze Innenspiegel autom. abblendbar Mittelarmlehne Innenraumfilter Lenksaeule einstellbar ParkDistanceControl vorne und hinten Elektrische Heckklappe Beheizbare Frontscheibe klimatisierte Sitze Keyless Entry Ambientebeleuchtung Lordosenstütze Lederlenkrad Geschwindigkeitsbegrenzungsanlage Klimaautomatik-3-Zonen Funkfernbedienung Sicht LED-Hauptscheinwerfer LED-Tagfahrlicht 360 Grad Kamera LED-Rueckleuchten Nebelscheinwerfer Scheinwerferregulierung Scheinwerferreinigung Privacyverglasung Sicherheit ABS Airbag Beifahrer-Airbag Wegfahrsperre Seitenairbags Alarmanlage ESP Antriebsschlupfregelung Reifendruckkontrolle Traktionskontrolle Kopfairbag Knieairbag Notrufsystem Pannenkit Notrad Airbag hinten Entertainment Navigationssystem Radio Telefonvorbereitung USB-Anschluss Bluetooth Freisprecheinrichtung Apple CarPlay Android Auto Sprachsteuerung DAB Touchscreen Induktionsladen für Smartphones Umwelt Grüne Umweltplakette Qualität Garantie Nichtraucherfahrzeug Sonstiges Metallic Alufelgen Dachreling Lenkradheizung Sommerreifen Gepäckraumabtrennung", "phone": "+497361930114", "price_label": null, "gearbox": "Automatic", "body_type": "SUV/Off-Road/Pick-Up", "doors": 5, "seats": 5, "displacement_cc": 2755, "cylinders": 4, "weight_kg": null, "emission_class": "Euro 6d", "emissions_sticker": "4 (Green)", "fuel_consumption": null, "drivetrain": "4WD", "number_of_previous_owners": 1, "general_inspection": "11/2028", "last_service": null, "production_date": null, "equipment": [ "360° camera", "Air conditioning", "Armrest", "Automatic climate control, 3 zones", "Cruise control", "Electric tailgate", "Electrical side mirrors", "Electrically adjustable seats", "Electrically heated windshield", "Heated steering wheel", "Hill Holder", "Keyless central door lock", "Leather seats", "Leather steering wheel", "Light sensor", "Lumbar support", "Multi-function steering wheel", "Navigation system", "Park Distance Control", "Parking assist system camera", "Parking assist system sensors front", "Parking assist system sensors rear", "Power windows", "Rain sensor", "Seat heating", "Seat ventilation", "Tinted windows", "Android Auto", "Apple CarPlay", "Bluetooth", "Digital cockpit", "Digital radio", "Hands-free equipment", "Induction charging for smartphones", "On-board computer", "Radio", "USB", "ABS", "Adaptive Cruise Control", "Alarm system", "Bi-Xenon headlights", "Blind spot monitor", "Central door lock", "Central door lock with remote control", "Daytime running lights", "Distance warning system", "Driver drowsiness detection", "Driver-side airbag", "Electronic stability control", "Emergency brake assistant", "Emergency system", "Fog lights", "Full-LED headlights", "Head airbag", "High beam assist", "Immobilizer", "Lane departure warning system", "LED Daytime Running Lights", "LED Headlights", "Passenger-side airbag", "Power steering", "Rear airbag", "Side airbag", "Speed limit control system", "Tire pressure monitoring system", "Traction control", "Traffic sign recognition", "Xenon headlights", "Alloy wheels", "Ambient lighting", "Automatically dimming interior mirror", "Cargo barrier", "Emergency tyre", "Emergency tyre repair kit", "Headlight washer system", "Particle filter", "Roof rack", "Summer tyres", "Touch screen", "Voice Control" ], "colour": "Grey", "manufacturer_colour": "Dark grey", "paint": "Metallic", "upholstery": "Full leather", "upholstery_colour": "Black", "version": "2,8l Diesel 48V Executive LAGER", "image_urls": [ "https://prod.pictures.autoscout24.net/listing-images/22c73c4a-a00e-4efd-bfdf-c331d650a421_f740629d-2f21-4368-9477-27f443e6ee95.jpg/1920x1080.webp", "https://prod.pictures.autoscout24.net/listing-images/22c73c4a-a00e-4efd-bfdf-c331d650a421_32e930da-99a2-4d00-a82d-66ee49356683.jpg/1920x1080.webp" ], "image_count": 9, "vehicle_type": "Car", "listing_country": "DE", "position": 4, "first_online_date": "2026-03-22T13:00:19+00:00", "functions": null, "native_id": 65046 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/autoscout24-listings-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the AutoScout24 Listings Scraper settings Configure your AutoScout24 Listings Scraper squid settings. Control pagination, result limits, time filters, and whether to fetch full listing details. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 99 | Maximum number of search result pages to scrape (max: 99) | | **max\_results** | integer | unlimited | Maximum number of listings to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## Optional Functions Enable these in the `params.functions` object: | Function | Type | Default | Description | | - | - | - | - | | **get\_listing\_details** | boolean | false | Visit each listing's detail page to fetch full specifications, equipment, and seller information (4 credits per listing) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since: 24h` to monitor new listings published in the last day. Enabling `get_listing_details` costs 4 additional credits per listing. Plan accordingly for large scrapes. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "AutoScout24 Listings Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 99, "fetch_since": "7d", "functions": { "get_listing_details": false } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "AutoScout24 Listings Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 99, "fetch_since": "7d", "functions": { "get_listing_details": False # Enable for full specs (4 credits per listing) } } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "AutoScout24 Listings Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 99, "fetch_since": "7d", "functions": { "get_listing_details": false } } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/bienici-listings-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Bien'Ici Search Export squid Add URLs or inputs to your **Bien'Ici Search Export** squid. Each task object must include the required fields below. Crawler ID: `53317cbe332e408c5c46372a18e4fc76` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields Default: `https://www.bienici.com/recherche/achat/bouches-du-rhone-13/maisonvilla`. # Credit Cost Source: https://docs.lobstr.io/examples/bienici-listings-search-export/credit-cost Credit cost for the Bien'Ici Listings Search Export 1 credit per listing. # Get Results Source: https://docs.lobstr.io/examples/bienici-listings-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Bien'Ici Search Export Retrieve scraped data from your **Bien'Ici Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the listing on Bienici. Example: `https://www.bienici.com/annonce/vente/antibes/appartement/3pieces/apimo-7410861` Date the listing was last modified. Example: `2022-09-23T09:03:11.123Z` City where the property is located. Example: `Antibes` Postal code of the property. Example: `06600` Unique identifier for the listing on Bienici. Example: `apimo-7410861` Type of ad (sale or rental). Example: `buy` Type of property (apartment, house, land, etc.). Example: `flat` Title of the listing. Example: `3 PIÈCES PROCHE PLACE DE GAULLE` Full description text of the listing. Example: `Idéalement situé au centre d'Antibes...` Date the listing was first published. Example: `2022-09-21T13:54:51.302Z` Seller's or agency's internal reference number. Example: `7410861` Whether the property is newly built. Example: `false` Year the property was constructed. Example: `1980` Listed price of the property. Example: `267000` Price excluding agency fees. Example: `260000` Living surface area in square meters. Example: `53` Total land surface area in square meters. Example: `250` Total number of rooms. Example: `3` Number of bedrooms. Example: `2` Total number of floors in the building. Example: `4` Floor number where the property is located. Example: `1` Number of bathrooms. Example: `1` Number of shower rooms. Example: `1` Number of toilets. Example: `2` Number of terraces. Example: `1` Number of parking spaces. Example: `1` Whether the property includes a cellar. Example: `true` Whether the property has an alarm system. Example: `false` Whether the property has a fireplace. Example: `false` Whether the property includes a garage. Example: `true` Whether the property includes parking. Example: `true` Whether the building has an elevator. Example: `true` Whether the building has an intercom. Example: `true` Whether the building has a door code entry. Example: `true` Whether the building has a video intercom. Example: `false` Whether the property has air conditioning. Example: `true` Whether the property includes a garden. Example: `true` Whether the property includes a swimming pool. Example: `false` Whether the property has a balcony. Example: `true` Whether the property has a terrace. Example: `true` Whether the property is accessible for disabled people. Example: `false` Whether the property is described as calm or quiet. Example: `true` Whether renovation work is needed. Example: `false` Cardinal orientation of the property (e.g. South, East). Example: `Sud-Ouest` Energy consumption value in kWh/m²/year. Example: `279` Greenhouse gas emissions value in kg CO2/m²/year. Example: `9` Energy efficiency class (A to G). Example: `E` Greenhouse gas emissions class (A to G). Example: `B` Date of the energy performance diagnostic. Example: `2022-09-21` Maximum energy consumption estimate. Example: `2900` Minimum energy consumption estimate. Example: `2100` Whether the July 2021 DPE regulation applies. Example: `true` Type of heating system (e.g. gas, electric, collective). Example: `radiateur électrique individuel` Whether the agency has an exclusive sale mandate. Example: `false` Who bears the agency fees (buyer or seller). Example: `purchaser` URL to the agency's fee schedule. Example: `https://api.apimo.pro/document_agency/` Agency fee as a percentage of the sale price. Example: `3.5` Whether the ad was created by a professional agency. Example: `true` Type of transaction (sale, rental, etc.). Example: `buy` Price per square meter. Example: `5037.74` Type of account that posted the listing (private or pro). Example: `agency` Display name of the seller or agency. Example: `APIMO Agency` Unique identifier of the seller or agency account. Example: `apimo-customer-123` French department code of the property location. Example: `06` District or neighborhood of the property. Example: `{'name': 'Antibes', 'code_insee': '06004'}` Whether the exact address is known. Example: `false` Information about location blurring applied to the listing. Example: `{'type': 'cityOrArrondissement'}` Optical fiber availability status at the property. Example: `deploye` Whether the property has electric vehicle charging stations. Example: `{'providers': []}` List of photo URLs for the listing. Example: `[]` Whether a 3D model is available for the listing. Example: `false` Whether the 3D model is featured prominently. Example: `false` Whether a 360° virtual tour is available. Example: `false` Whether a virtual tour is requested. Example: `false` IDs of related listings. Example: `[]` Whether the listing is exclusive to Bienici. Example: `false` End date of the exclusive promotion period. Example: `0` Relevance score boost applied to the listing. Example: `5` Whether the listing price has been reduced. Example: `false` Whether a reduced VAT rate applies to the property. Example: `false` Whether the property is part of a condominium. Example: `true` Whether the condominium has ongoing legal proceedings. Example: `false` Current status of the listing (active, sold, rented, etc.). Example: `{'onTheMarket': True}` Threshold date used for DPE classification rules. Example: `2025-08-17T00:00:00.000Z` Whether the district name is displayed on the listing. Example: `true` Whether an insurance estimate is displayed. Example: `true` Whether email contact is highlighted on the listing. Example: `false` Whether there is no gated content behind the contact form. Example: `false` Whether a PDF is available behind the contact form. Example: `false` Number of times the phone number has been revealed. Example: `[]` Character length of the listing description. Example: `92` Whether the listing includes a geo-risks mention. Example: `false` Postal code used for search filter matching. Example: `06600` User-specific data relative to the listing (e.g. saved, contacted). Example: `{}` Alias used for watermarking listing photos. Example: `apimo-watermark` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 29338, "object": "result", "squid": "55a371355446ebb3d3cb415f48919146", "run": "e2d92e66d85eba25f6e9a6affa046b7d", "url": "https://www.bienici.com/annonce/vente/antibes/appartement/3pieces/apimo-7410861", "modification_date": "2022-09-23T09:03:11.123Z", "city": "Antibes", "postal_code": "06600", "listing_id": "apimo-7410861", "ad_type": "buy", "property_type": "flat", "title": "3 PIÈCES PROCHE PLACE DE GAULLE", "description": "Idéalement situé au centre d'Antibes...", "publication_date": "2022-09-21T13:54:51.302Z", "reference": "7410861", "new_property": false, "year_of_construction": 1980, "price": 267000, "price_without_fees": 260000, "surface_area": 53, "land_surface_area": 250, "rooms_quantity": 3, "bedrooms_quantity": 2, "floor_quantity": 4, "floor": 1, "bathrooms_quantity": 1, "shower_rooms_quantity": 1, "toilet_quantity": 2, "terraces_quantity": 1, "parking_places_quantity": 1, "has_cellar": true, "has_alarm": false, "has_fireplace": false, "has_garage": true, "has_parking": true, "has_elevator": true, "has_intercom": true, "has_door_code": true, "has_videophone": false, "has_air_conditioning": true, "has_garden": true, "has_pool": false, "has_balcony": true, "has_terrace": true, "is_disabled_people_friendly": false, "is_calm": true, "work_to_do": false, "exposition": "Sud-Ouest", "energy_value": 279, "greenhouse_gaz_value": 9, "energy_classification": "E", "greenhouse_gaz_classification": "B", "energy_performance_diagnostic_date": "2022-09-21", "max_energy_consumption": 2900, "min_energy_consumption": 2100, "use_july_2021_energy_performance_diagnostic": true, "heating": "radiateur électrique individuel", "is_exclusive_sale_mandate": false, "fees_charged_to": "purchaser", "agency_fee_url": "https://api.apimo.pro/document_agency/", "agency_fee_percentage": 3.5, "ad_created_by_pro": true, "transaction_type": "buy", "price_per_square_meter": 5037.74, "account_type": "agency", "account_display_name": "APIMO Agency", "customer_id": "apimo-customer-123", "department_code": "06", "district": { "name": "Antibes", "code_insee": "06004" }, "address_known": false, "blur_info": { "type": "cityOrArrondissement" }, "optical_fiber_status": "deploye", "charging_stations": { "providers": [] }, "photos": [], "with_3d_model": false, "is_3d_highlighted": false, "has_lot_with_360": false, "need_virtual_tour": false, "related_ads_ids": [], "is_bien_ici_exclusive": false, "end_of_promoted_as_exclusive": 0, "relevance_bonus": 5, "price_has_decreased": false, "reduced_vat": false, "is_in_condominium": true, "is_condominium_in_procedure": false, "status": { "onTheMarket": true }, "threshold_date": "2025-08-17T00:00:00.000Z", "display_district_name": true, "display_insurance_estimation": true, "highlight_mail_contact": false, "nothing_behind_form": false, "pdf_behind_form": false, "phone_displays": [], "description_text_length": 92, "has_georisques_mention": false, "postal_code_for_search_filters": "06600", "user_relative_data": {}, "photo_watermark_alias": "apimo-watermark", "functions": null, "native_id": 29338 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/bienici-listings-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Bien'Ici Listings Search Export scraper settings Configure your Bien'Ici Listings Search Export squid settings. Control pagination, result limits, time filters, and whether to include sponsored listings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 100 | Maximum number of search result pages to scrape (max: 100) | | **max\_results** | integer | 50 | Maximum number of listings to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **collect\_ads** | boolean | false | Include sponsored/promoted listings in results | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since: 24h` to monitor new listings published in the last day. Keep concurrency at 1 to avoid rate limiting on Bien'Ici. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Bien'\''ici Listings Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 100, "max_results": 50, "collect_ads": false, "fetch_since": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Bien'ici Listings Search Export (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 100, "max_results": 50, "collect_ads": False, "fetch_since": None } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Bien'ici Listings Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 100, "max_results": 50, "collect_ads": false, "fetch_since": null } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/capterra-reviews-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Capterra Reviews Scraper squid Add Capterra product URLs to your **Capterra Reviews Scraper** squid. Crawler ID: `1b9cbf17d4315e37f52ddd8928b44484` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields The Capterra page of the product whose reviews you want, e.g. `https://www.capterra.com/p/150854/Apify/reviews/`. The product page itself (`https://www.capterra.com/p/150854/Apify/`) and the older `https://www.capterra.com/reviews/150854/Apify` form work too, with or without the trailing slash: the product is identified by the number in the URL, so an outdated product name in the URL is corrected automatically. Capterra's regional sites work too, with their own URL form, e.g. `https://www.capterra.co.uk/software/150854/apify` or `https://www.capterra.fr/reviews/150854/apify`: `co.uk`, `ca`, `com.au`, `co.nz`, `ie`, `in`, `ae`, `co.za`, `fr`, `es`, `it`, `nl`, `be`, `ch`, `at`, `pt`, `com.br`, `mx`, `se`, `dk`, `no`, `fi` and `pl`. A regional site is collected on that site, in the language it shows by default. Regional sites sort only by Most Recent or Most Helpful and have no Reviewer's Role or Frequency of Use filter. The order and the filters come from the settings below, not from the URL. A URL ending in `?page=N` starts the collection at page N of that order (25 reviews per page; on a regional site page 1 holds the 5 highlighted reviews). Example: `https://www.capterra.com/p/150854/Apify/reviews/` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.capterra.com/p/150854/Apify/reviews/"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.capterra.com/p/150854/Apify/reviews/"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.capterra.com/p/150854/Apify/reviews/"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/capterra-reviews-scraper/credit-cost Credit cost for the Capterra Reviews Scraper 1 credit per review row. # Get Results Source: https://docs.lobstr.io/examples/capterra-reviews-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Capterra Reviews Scraper Retrieve scraped data from your **Capterra Reviews Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Reviews Numeric id of the review on the site it was written on (see `source_site`). Two reviews from different source sites can share this number, so use `global_review_id` to identify a review. Example: `7184664` Unique id of the review across Capterra, GetApp and Software Advice: the source site followed by the review number. Together with `source_domain` it identifies a row. Example: `Capterra___7184664` Headline the reviewer gave to the review. Example: `A practical platform for collecting public web data for research` Date the review was written (day precision, UTC midnight). Capterra does not publish a time of day for reviews. Example: `2026-07-14T00:00:00+00:00` Overall rating given by the reviewer, from 1 to 5. Example: `5.0` Ease of use rating, from 1 to 5. Example: `5.0` Customer service rating, from 1 to 5. Example: `5.0` Features and functionality rating, from 1 to 5. Example: `5.0` Value for money rating, from 1 to 5. Example: `5.0` How likely the reviewer is to recommend the product, from 0 to 10. Example: `10.0` What the reviewer likes about the product (Pros). What the reviewer dislikes about the product (Cons). Overall comments on the reviewer's experience with the product. Why the reviewer switched to this product, when given. Why the reviewer chose this product over the alternatives, when given. Example: `Ease of use and the large library of ready-made Actors` Products the reviewer considered before choosing this one, each with its Capterra id, name, slug and link. Example: `[{"id": "234796", "name": "Selenium IDE", "slug": "Selenium-IDE", "url": "https://www.capterra.com/p/234796/Selenium-IDE/"}]` Names of the products the reviewer considered, comma separated. Example: `Selenium IDE, Octoparse` Products the reviewer used before switching to this one, each with its Capterra id, name, slug and link. Names of the products the reviewer switched from, comma separated. Example: `Selenium IDE` Incentive disclosure code published by Capterra: `NoIncentive`, `VendorReferredIncentivized` or `NominalGift`. Example: `NoIncentive` `true` when the reviewer was offered an incentive (a gift card or a vendor-referred incentive) to write the review. Example: `false` Capterra's own explanation of how the review was collected and whether an incentive was offered. Example: `No Incentive Offered: This review was submitted organically.` Site of the Gartner network the review was written on: `Capterra`, `GetApp` or `SoftwareAdvice`. Example: `Capterra` `true` when the reviewer chose to stay anonymous (shown as "Verified Reviewer"). On regional Capterra sites in a language other than English, French, Spanish, Brazilian Portuguese or Dutch, it is empty for the first 5 reviews of a product when Capterra does not say. Example: `false` Public reply of the vendor to the review, when there is one. Date of the vendor's reply (day precision, UTC midnight). Example: `2024-05-28T00:00:00+00:00` Name of the reviewer as displayed by Capterra (first name and initial, or "Verified Reviewer" when anonymous); regional sites show the first name only. Example: `Faustino G.` Job title of the reviewer. On regional Capterra sites in a language other than English, French, Spanish, Portuguese or Dutch, the line is kept as Capterra shows it (job title followed by the reviewer's country). Example: `Researcher` Industry of the reviewer's company. Example: `Education Management` Size of the reviewer's company. Example: `11-50 employees` How long the reviewer has used the product. Example: `6-12 months` Link to the reviewer's profile picture, when there is one. `true` when the reviewer's identity was verified through LinkedIn. Example: `true` `true` when Capterra validated the reviewer. Example: `true` Validation checks the reviewer passed, comma separated (`LinkedIn`, `BusinessEmail`, `ProofOfLink`). Example: `LinkedIn, ProofOfLink` Capterra id of the reviewed product, the number after `/p/` in its URL. Example: `150854` Internal unique identifier of the product in the Gartner network. Example: `9332c814-d90b-4746-bb51-a6d200b2b406` Name of the reviewed product. Example: `Apify` Slug of the product in its Capterra URL (it can differ from the product name). Example: `Apify` Name of the company that makes the product. Example: `Apify` Average overall rating of the product on Capterra, from 1 to 5. Example: `4.8` Total number of reviews of the product on Capterra. Example: `579` Main Capterra software category of the product. Example: `Web Scraping` Capterra reviews page of the product the review was collected from (the regional site's own product page for a regional URL). Example: `https://www.capterra.com/p/150854/Apify/reviews/` Capterra site the review was collected from: `capterra.com` or a regional site such as `capterra.co.uk` or `capterra.fr`. The same review can be collected from several sites (a regional site can show it in its original language), so a review is identified by `global_review_id` together with `source_domain`. Example: `capterra.com` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"review_id": "7184664", "global_review_id": "Capterra___7184664", "title": "A practical platform for collecting public web data for research", "written_on": "2026-07-14T00:00:00+00:00", "overall_rating": 5.0, "ease_of_use_rating": 5.0, "customer_support_rating": 5.0, "functionality_rating": 5.0, "value_for_money_rating": 5.0, "likelihood_to_recommend": 10.0, "pros_text": "I mainly use Apify for academic research on socio-environmental issues and digital public debates...", "cons_text": "Some Actors have excellent documentation, while others require more experimentation...", "general_comments": "My overall experience has been very positive. I use Apify as part of my research workflow...", "incentivized": "NoIncentive", "is_incentivized": false, "source_site": "Capterra", "is_anonymous": false, "reviewer_name": "Faustino G.", "reviewer_job_title": "Researcher", "reviewer_industry": "Education Management", "reviewer_company_size": "11-50 employees", "reviewer_time_used_product": "6-12 months", "reviewer_linkedin_verified": true, "reviewer_is_validated": true, "reviewer_validations": "LinkedIn, ProofOfLink", "product_id": "150854", "product_name": "Apify", "product_slug": "Apify", "vendor_name": "Apify", "product_overall_rating": 4.8, "product_total_reviews": 579, "product_category": "Web Scraping", "source_url": "https://www.capterra.com/p/150854/Apify/reviews/", "source_domain": "capterra.com"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/capterra-reviews-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Capterra Reviews Scraper settings Configure your **Capterra Reviews Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | sort | string | `Most Recent` | Order in which the reviews are collected. `Most Recent` returns the newest reviews first, so `max_results` keeps the latest ones. `Most Helpful` is Capterra's own default order. Ignored when `fetch_since` is set, because that setting always collects newest first. Regional Capterra sites (e.g. `capterra.co.uk`) only offer `Most Recent` and `Most Helpful`: a task on a regional site with `Highest Rating` or `Lowest Rating` stops with an error — use the `rating` filter instead (e.g. `1-2 stars`). One of: `Most Recent`, `Most Helpful`, `Highest Rating`, `Lowest Rating`. | | rating | string | `Any` | Only collect reviews with this overall rating. Applied by Capterra itself, so filtered-out reviews cost nothing. Use `1-2 stars` or `1-3 stars` to focus on the product's weaknesses. On regional sites Capterra filters one exact star value only, so `1 star`, `4-5 stars`, `1-2 stars` and `1-3 stars` are checked by us on each review: more pages are read, but a filtered-out review is never billed. One of: `Any`, `5 stars`, `4 stars`, `3 stars`, `2 stars`, `1 star`, `4-5 stars`, `1-2 stars`, `1-3 stars`. | | company\_size | string | `Any` | Only collect reviews written by people working in a company of this size. Applied by Capterra itself. One of: `Any`, `Self-employed`, `1-10 employees`, `11-50 employees`, `51-200 employees`, `201-500 employees`, `501-1,000 employees`, `1,001-5,000 employees`, `5,001-10,000 employees`, `10,001+ employees`. | | reviewer\_role | string | `Any` | Only collect reviews from reviewers with this role towards the product, as declared to Capterra. `Other` covers team members and people who helped with the purchase. A reviewer can declare several roles. Applied by Capterra itself. Not available on Capterra's regional sites: a task on a regional site with this filter set stops with an error. One of: `Any`, `User`, `Administrator`, `Other`. | | time\_used\_product | string | `Any` | Only collect reviews from reviewers who used the product for this long. Applied by Capterra itself. One of: `Any`, `Free Trial`, `Less than 6 months`, `6-12 months`, `1-2 years`, `2+ years`. | | frequency\_of\_use | string | `Any` | Only collect reviews from reviewers who use the product this often. Applied by Capterra itself. Not available on Capterra's regional sites: a task on a regional site with this filter set stops with an error. One of: `Any`, `Daily`, `Weekly`, `Monthly`, `Other`. | | fetch\_since | fetch\_since | — | Only collect reviews written on or after this threshold (based on `written_on`). Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`). Capterra dates reviews to the day, so every review written on the threshold day is kept. When this is set the reviews are always collected newest first, whatever `sort` says, and the collection stops at the first older review. | | fetch\_since\_timezone | string | — | Timezone used to read an absolute `fetch_since` date, e.g. `America/New_York`. Ignored for relative values. | | max\_results | integer | — | Maximum number of reviews collected per product URL. Leave empty to collect every review Capterra shows for the product. | | max\_unique\_results\_per\_run | integer | — | Maximum number of unique reviews retrieved across all tasks in the entire run. Leave empty for unlimited. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "sort": "Lowest Rating", "rating": "1-2 stars", "company_size": "11-50 employees", "max_results": 100 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sort": "Lowest Rating", "rating": "1-2 stars", "company_size": "11-50 employees", "max_results": 100, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"sort": "Lowest Rating", "rating": "1-2 stars", "company_size": "11-50 employees", "max_results": 100}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/contact-details/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Contact Details Scraper squid Add URLs or inputs to your **Contact Details Scraper** squid. Crawler ID: `7d83eacc7b94f14d5ffda28c6d357961` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Website to crawl. A bare domain or full URL. Example: `https://lobstr.io` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "7d83eacc7b94f14d5ffda28c6d357961", "tasks": [ {"url": "https://lobstr.io"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "7d83eacc7b94f14d5ffda28c6d357961", "tasks": [ {"url": "https://lobstr.io"} ] } ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://lobstr.io"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/contact-details/credit-cost Credit cost for the Contact Details Scraper 1 credit per result row. # Get Results Source: https://docs.lobstr.io/examples/contact-details/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Contact Details Scraper Retrieve scraped data from your **Contact Details Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Normalised website identity, lowercased. Example: `lobstr.io` Registrable domain of the crawled website. Example: `lobstr.io` Company or site name, from og:site\_name or JSON-LD. Example: `Lobstr` Email addresses published on the crawled pages. Example: `["hello@lobstr.io"]` High confidence phone numbers, from tel: links Phone-shaped values that failed validation Company LinkedIn pages found. Example: `["https://www.linkedin.com/company/lobstr-io"]` Personal LinkedIn profiles found Twitter / X profile URLs Instagram profile URLs Facebook page URLs YouTube channel URLs TikTok profile URLs Pinterest profile URLs Discord invite URLs Snapchat profile URLs Threads profile URLs Telegram profile or channel URLs Reddit profile or subreddit URLs WhatsApp click-to-chat URLs Maps every contact value to the URL of the first page it was found on Pages actually fetched, in fetch order Number of pages fetched. Example: `4` Crawl outcome: `ok`, `no_contacts`, or `unreachable`. Example: `ok` Reason behind the status (empty when the crawl succeeded) ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"domain": "lobstr.io", "company_name": "Lobstr", "emails": ["hello@lobstr.io"], "linkedin_urls": ["https://www.linkedin.com/company/lobstr-io"], "pages_crawled": 4, "status": "ok"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/contact-details/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Contact Details Scraper settings Configure your **Contact Details Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | rows | integer | — | Number of rows returned per API page | | max\_pages\_per\_site | integer | 10 | Max pages fetched per website, homepage included | | follow\_contact\_pages | boolean | true | Follow contact, about, imprint and legal notice pages from the homepage | | same\_domain\_only | boolean | true | Only crawl pages on the same domain | | max\_results | integer | — | Max rows collected per task | | max\_unique\_results\_per\_run | integer | — | Max unique results across all tasks in the run | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/7d83eacc7b94f14d5ffda28c6d357961 \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_pages_per_site": 20, "follow_contact_pages": true, "same_domain_only": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/7d83eacc7b94f14d5ffda28c6d357961", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_pages_per_site": 20, "follow_contact_pages": True, "same_domain_only": True } ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"max_pages_per_site": 20, "follow_contact_pages": true, "same_domain_only": true}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/crunchbase-companies-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Crunchbase Companies Scraper squid Add company URLs or company search URLs to your **Crunchbase Companies Scraper** squid. Crawler ID: `f8209af58c212db5d8468d068e09ce02` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields A Crunchbase company URL (`https://www.crunchbase.com/organization/github`) for one company, or a company search URL (`https://www.crunchbase.com/discover/organization.companies`) to collect a list. Logged out, Crunchbase serves at most 15 companies per search, so use the search filters in the Settings tab to aim each search, or feed one company URL per task to collect companies in volume. Filters written inside a pasted search URL are not applied — Crunchbase does not serve them to a logged-out session, so set the search filters below (`industry`, `location`, `employee_count`, `founded_year_min`/`_max`, `funding_stage`, `operating_status`, `company_type`, `ipo_status`) instead. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.crunchbase.com/organization/github"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.crunchbase.com/organization/github"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.crunchbase.com/organization/github"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/crunchbase-companies-scraper/credit-cost Credit cost for the Crunchbase Companies Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Companies | 1 | 1 credit per company. | | Full Company Details | 1 | 1 extra credit per company when `company_details` is enabled on a search. Company URLs return the full details for free on the first request. | Logged out, Crunchbase serves at most 15 companies per search page and refuses to paginate. Use the search filters to slice a market into as many 15-company windows as you need, or feed company URLs (no such limit). # Get Results Source: https://docs.lobstr.io/examples/crunchbase-companies-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Crunchbase Companies Scraper Retrieve scraped data from your **Crunchbase Companies Scraper** runs. One row per company. Company-URL tasks return every field for free on the first request; search tasks return the core fields for free and the "Full Company Details" fields only when `company_details` is enabled. Crunchbase gates funding dates and amounts behind its paid plan, so `last_funding_amount`, `last_funding_currency` and `last_funding_date` are only filled for the minority of companies (about 3 of 20 sampled) where Crunchbase still publishes the amount on the public activity timeline. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Companies Company name as published on Crunchbase. Example: `GitHub Inc` Crunchbase permalink (the slug in the company URL). Example: `github` Crunchbase internal company identifier, stable across renames. Crunchbase profile URL, built from the permalink. Company logo hosted by Crunchbase. One-line company description. Crunchbase industries (categories) of the company. Crunchbase industry groups the company belongs to. Headquarters city. Headquarters region or state. Headquarters country. Headquarters continent. Crunchbase Rank of the company (lower is better). Employee count range published by Crunchbase (e.g. `1001-5000`). Type of the most recent funding round. Whether the company is `private`, `public` or `delisted`. ### Full Company Details Full company description. Company website. Registered legal name. `for_profit` or `non_profit`. Whether the company is still `active` or `closed`. Wider regions Crunchbase attaches to the headquarters. Public contact email published on the profile. Public contact phone published on the profile. LinkedIn page of the company. X (Twitter) profile of the company. Facebook page of the company. Founders with their Crunchbase person profile. Number of funding rounds Crunchbase lists. Number of investors in the company. Number of lead investors in the company. Number of investments the company itself made. Number of investments the company led. Investors of the company, with the round they joined and whether they led it. Crunchbase keeps the amounts behind its paid plan. Funding rounds of the company. `announced_on`, `money_raised` and `currency` are only added to the few rounds Crunchbase still publishes on the public activity timeline. Amount raised by the company in the most recent round Crunchbase publishes an amount for. Only rounds the company itself raised are counted, never rounds it invested in. Empty for most companies (Pro-gated everywhere else). When filled, `last_funding_date` gives the date of that same round, which can be older than the round named by `last_funding_type`. Currency of `last_funding_amount`. Same minority coverage as the amount. Date of the funding round `last_funding_amount` refers to. Same minority coverage as the amount. Number of companies this company acquired. Companies acquired by this company. Company that acquired this company, when it was acquired. Type of the acquisition of this company. Terms of the acquisition of this company (`cash`, `stock`, `cash_and_stock`). Parent company that owns this company. Number of sub-organizations owned by this company. Sub-organizations owned by this company. Companies Crunchbase considers similar. Highlighted current employees with their job title. Board members and advisors listed on the profile. Number of contacts Crunchbase holds for this company. Number of contact emails Crunchbase holds for this company. Number of contact phone numbers Crunchbase holds for this company. Number of people currently employed according to Crunchbase profiles. Number of current advisor and board positions. Products and services of the company. Product launches reported in the press. Partnership announcements reported in the press. Awards reported in the press. Layoffs reported in the press. Legal proceedings reported in the press. Key employee arrivals and departures reported in the press. Recent press articles Crunchbase lists on the activity timeline of the company: date, title, publisher, author, article URL and thumbnail. At most 10 most-recent items. Number of press articles returned in `news_articles` (at most 10). Office openings reported in the press. Crunchbase Growth Score of the company. Change of the Growth Score over the last 90 days. Crunchbase Heat Score of the company. Change of the Heat Score over the last 90 days. Number of web technologies BuiltWith detects on the company website. Web technologies BuiltWith detects, as shown on the profile. Monthly website visits measured by Semrush. Month-over-month change of the Semrush visits, as a ratio. Date the Semrush figures were last refreshed. Number of mobile apps Apptopia attributes to the company. Total mobile app downloads measured by Apptopia. Month-over-month change of the Apptopia downloads, as a ratio. Number of products the company uses according to Siftery. Products the company uses according to Siftery. Date the Bombora intent data was last refreshed. Topics the company is currently researching, from Bombora intent data. Estimated IT spend of the company in USD, from Aberdeen. Number of granted patents, from IPqwery. Number of registered trademarks, from IPqwery. Most frequent trademark class, from IPqwery. Stock exchange and ticker, for public companies. Crunchbase hub tags such as `unicorn` or `exited_unicorn`. Crunchbase hubs the company is featured in. Rank of the company inside each of its industries. Number of investments in diversity-spotlight companies. Investments made in companies with a diversity spotlight. Number of funds raised by the company, for investors. Funds raised by the company, for investors. Fund amounts are Pro-gated. Investments the company made in other companies. Portfolio companies that exited. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"company_name": "GitHub Inc", "permalink": "github", "crunchbase_url": "https://www.crunchbase.com/organization/github", "short_description": "GitHub is a software company that offers code hosting services.", "industries": ["Artificial Intelligence (AI)", "Developer Tools"], "headquarters_city": "San Francisco", "headquarters_country": "United States", "num_employees_range": "1001-5000", "last_funding_type": "series_b", "ipo_status": "private", "cb_rank": 38516}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/crunchbase-companies-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Crunchbase Companies Scraper settings Configure your **Crunchbase Companies Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | max\_results | integer | — | Maximum number of companies collected per task. Leave empty to collect everything the task serves. A company URL always yields one company; a search serves at most 15 companies because Crunchbase gates pagination behind its paid plan. | | industry | string | — | Only keep companies in these industries, e.g. `Financial Services` or `Artificial Intelligence`. Separate several with commas. Applies to search pages only. | | location | string | — | Only keep companies based in these places, e.g. `San Francisco`, `France` or `United States`. Separate several with commas. Applies to search pages only. | | founded\_year\_min | integer | — | Only collect companies founded in this year or later. Crunchbase keeps the founding date itself behind its paid plan, so it filters the search but never appears in the exported row. Search URLs only. | | founded\_year\_max | integer | — | Only collect companies founded in this year or earlier. Same paywall caveat as `founded_year_min`. Search URLs only. | | funding\_stage | string | — | Only keep companies whose latest funding round is one of these stages. Comma separated for several (e.g. `seed,series_a`). One of: `pre_seed`, `seed`, `series_a`, `series_b`, `series_c`, `series_d`, `series_e`, `series_f`, `series_g`, `series_h`, `series_i`, `series_j`, `series_unknown`, `private_equity`, `debt_financing`, `post_ipo_equity`, `secondary_market`, `non_equity_assistance`, `undisclosed`. Search pages only. | | employee\_count | string | — | Only keep companies in one of these employee count ranges. Comma separated for several (e.g. `11-50,51-100`). One of: `1-10`, `11-50`, `51-100`, `101-250`, `251-500`, `501-1000`, `1001-5000`, `5001-10000`, `10001+`. Search pages only. | | operating\_status | string | — | Only collect companies that are still `active`, or only the ones Crunchbase marks as `closed`. Search URLs only. | | company\_type | string | — | Only collect `for_profit` companies or only `non_profit` organizations. Search URLs only. | | ipo\_status | string | — | Only collect `public` or `private` companies. Search URLs only. | | company\_details | boolean | false | Open every company found by a search to add its website, contacts, founders, investors, funding rounds, acquisitions, products and technology profile. Company URLs already include all of this at no extra cost. Costs 1 extra credit per company on a search. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "industry": "Financial Services", "location": "San Francisco", "employee_count": "11-50", "funding_stage": "series_a", "company_details": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "industry": "Financial Services", "location": "San Francisco", "employee_count": "11-50", "funding_stage": "series_a", "company_details": True, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"industry": "Financial Services", "location": "San Francisco", "employee_count": "11-50", "funding_stage": "series_a", "company_details": true}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-ad-library-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Facebook Ad Library Scraper squid Add URLs or inputs to your **Facebook Ad Library Scraper** squid. Crawler ID: `f667dfc7398156ba2359836105184825` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Meta Ad Library URL (keyword search, advertiser page, or single ad). Example: `https://www.facebook.com/ads/library/?q=apple&search_type=keyword_unordered` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "f667dfc7398156ba2359836105184825", "tasks": [ {"url": "https://www.facebook.com/ads/library/?q=apple&search_type=keyword_unordered"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "f667dfc7398156ba2359836105184825", "tasks": [ {"url": "https://www.facebook.com/ads/library/?q=apple&search_type=keyword_unordered"} ] } ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.facebook.com/ads/library/?q=apple&search_type=keyword_unordered"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/facebook-ad-library-scraper/credit-cost Credit cost for the Facebook Ad Library Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Ads | 1 | 1 credit per ad. | | Ad Details | 1 | 1 extra credit per ad when the add-on is enabled. Off by default. | # Get Results Source: https://docs.lobstr.io/examples/facebook-ad-library-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Facebook Ad Library Scraper Retrieve scraped data from your **Facebook Ad Library Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Unique Meta Ad Library identifier. Example: `1234567890123456` Direct Ad Library URL of this ad Meta's internal ad id Numeric identifier of the Facebook Page Name of the Facebook Page running the ad. Example: `Apple` URL of the Facebook Page Number of likes of the Page Categories of the Page Profile picture of the Page Whether the Page has been deleted Legal name of the confirmed page owner Meta identifier of the confirmed owner Main body text of the ad creative. Example: `Introducing iPhone 17. The most advanced iPhone yet.` Headline of the ad creative Link description shown under the headline Display link (domain shown on the creative) Label of the call-to-action button Type of the call-to-action button Destination URL of the ad Creative format: `IMAGE`, `VIDEO`, `MEME`, `DCO`, `DPA`, `CAROUSEL` Paid-for-by byline (political/issue ads) Images of the creative Videos of the creative Cards of a multi-card creative Whether the ad reshares an existing post Date and time the ad started running. Example: `2026-09-01T00:00:00Z` Date and time the ad stopped running Total time active, in seconds Whether the ad is currently running. Example: `true` Meta platforms the ad runs on Currency of the spend range Spend range as a range string (political ads only) Impressions range (political ads only) Meta's internal impressions index. Example: `4` Ad Library categories Number of ads Meta collated with this one Whether the ad is eligible or was taken down Whether Meta flags the creative as sensitive Whether the creative contains AI-generated or altered media Total ads Meta reports for this advertiser Keyword the ad was found with ### Detail Fields The following fields require `ad_details: true` in settings. Declared payer of the ad Declared beneficiary of the ad Whether the ad targets the EU Total EU accounts reached Locations targeted in the EU Gender targeted in the EU Lower bound of age range targeted in EU Upper bound of age range targeted in EU EU reach broken down by country, age and gender Whether Meta has taken the ad down About text of the advertiser's Page Vanity alias of the advertiser's Page Category of the advertiser's Page Verification status of the advertiser's Page Number of followers of the advertiser's Instagram account Username of the advertiser's Instagram account Share of impressions by age and gender (political ads) Share of impressions by region (political ads) Lifetime ad spend of the advertiser Policy violations Meta records on the ad ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"ad_archive_id": "1234567890123456", "page_name": "Apple", "ad_text": "Introducing iPhone 17. The most advanced iPhone yet.", "is_active": true, "start_date": "2026-09-01T00:00:00Z", "impressions_index": 4}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-ad-library-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Facebook Ad Library Scraper settings Configure your **Facebook Ad Library Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | rows | integer | — | Number of rows returned per API page | | country | string | ALL | Country ads are served in, as a 2-letter ISO code | | ad\_status | string | all | `all`, `active`, or `inactive` | | ad\_type | string | all | `all` or `political_and_issue_ads` | | media\_type | string | all | `image`, `video`, `meme`, `image_and_meme`, `none`, or `all` | | platforms | string | — | Comma-separated Meta platforms: `facebook`, `instagram`, `audience_network`, `messenger` | | languages | string | — | Comma-separated creative languages as ISO 639-1 codes | | date\_from | string | — | Only collect ads running on or after this date (YYYY-MM-DD) | | date\_to | string | — | Only collect ads running on or before this date (YYYY-MM-DD) | | sort\_by | string | total\_impressions | `total_impressions` or `recent` | | ad\_details | boolean | false | Open each ad's transparency detail to add payer, beneficiary, EU targeting data | | max\_results | integer | — | Max ads collected per URL | | max\_unique\_results\_per\_run | integer | — | Max unique ads across all tasks in the run | Setting `ad_details: true` enables additional detail fields in results. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/f667dfc7398156ba2359836105184825 \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "country": "US", "ad_status": "active", "sort_by": "recent", "max_results": 200, "ad_details": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/f667dfc7398156ba2359836105184825", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "country": "US", "ad_status": "active", "sort_by": "recent", "max_results": 200, "ad_details": True } ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"country": "US", "ad_status": "active", "ad_type": "all", "sort_by": "recent", "max_results": 200, "ad_details": true}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-business-page-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Facebook Business Page Scraper squid Add URLs or inputs to your **Facebook Business Page Scraper** squid. Each task object must include the required fields below. Crawler ID: `c80e36ed76bfae3c332e8983971403d7` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/facebook-business-page-scraper/credit-cost Credit cost for the Facebook Business Page Scraper 1 credit per page. # Get Results Source: https://docs.lobstr.io/examples/facebook-business-page-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Facebook Business Page Scraper Retrieve scraped data from your **Facebook Business Page Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the Facebook page. Example: `https://www.facebook.com/nocommentpau` Internal platform identifier for the Facebook page. Example: `100063521350725` Name of the Facebook page. Example: `No Comment Pau` URL slug of the Facebook page (e.g. used in facebook.com/slug). Example: `nocommentpau` URL of the Facebook page's profile picture. Example: `https://scontent-arn2-1.xx.fbcdn.net/v/t39.30808-1/305969088_514545647339476_1479009747142197002_n.jpg?stp=dst-jpg_s200x200_tt6&_nc_cat=106&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=wbDXCjTyDL0Q7kNvwH5JYnv&_nc_oc=AdmzXtKRvkHLqrkixm0NSUYOzt6H8GocBfUDf8qkJur4vYPsYgQT9sRxnp8PkFRhA9o&_nc_zt=24&_nc_ht=scontent-arn2-1.xx&_nc_gid=pIklvIxjpHdjpcgKR-p9eQ&_nc_ss=8&oh=00_Afyb_NxP5U7IKQFtCCoCRfKRKqqnKN6Ip2bObUiy_NQffw&oe=69C0A25B` Total number of likes on the Facebook page. Example: `0` Total number of followers of the Facebook page. Example: `15` Number of check-ins or visits reported on the Facebook page. Example: `0` Website URL listed on the Facebook page. Example: `nocommentpau.fr` Price range listed on the Facebook page. Example: `$$` Category of the Facebook page (e.g. Restaurant, Brand, Public Figure). Example: `Restaurant` Link to the menu listed on the Facebook page Instagram profile URL linked to the Facebook page Email address listed on the Facebook page. Example: `bonjour@nocommentpau.fr` Full address listed on the Facebook page. Example: `5 rue Alfred de Lassence, Pau, France` About text from the Facebook page's About section. Example: `NO COMMENT un véritable lieu d’épicuriens 🤩` Customer reviews and rating summary on the Facebook page. Example: `0` Average rating of the Facebook page Current operational status of the Facebook page. Example: `valid_page` Phone number listed on the Facebook page. Example: `+33 5 59 83 76 80` ## Response ```json 200 theme={null} { "total_results": 2, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 2, "data": [ { "id": 91234, "object": "result", "squid": "79adf8711330a32e9a07e1748c362f5d", "run": "0ff156b7279b996ab65ab2d24a129a5c", "url": "https://www.facebook.com/McDonalds/", "internal_id": 100064458773195, "name": "McDonald's", "slug": "McDonalds", "image_url": "https://scontent-fra5-1.xx.fbcdn.net/v/t39.30808-1/503818730_1129343465890935_5294978503944330026_n.jpg?stp=dst-jpg_s200x200_tt6&_nc_cat=1&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=ecpcWRi2YEoQ7kNvwEBNzJ0&_nc_oc=AdkGqDrrynKpdQIn969cKd5F2MAIBw_-PZVJyq7E5egIZ1pVNYP5jXeEgbCF9zaP-g8&_nc_zt=24&_nc_ht=scontent-fra5-1.xx&_nc_gid=rTZ4MlBvhVIAMDTPlOtqGA&oh=00_AfQa8VoR1_d10X_-UukzACALRyTtCCrJfVhBindx4b3I8g&oe=6882E23E", "likes": "82M", "followers": "82M", "visits": 0, "wesbite": "beta.joinkalo.com/events/f381aa59-b183-4719-9c36-b20f0d1ffa47/join", "price": "$", "category": "Burger Restaurant", "menu": null, "instagram": null, "email": null, "address": null, "about": "i’m retiring you won. Snack Wrap is back.", "reviews": 0, "score": 2, "status": "valid_page", "phone": "+1 806-445-0333", "functions": null, "native_id": 91234 }, { "id": 91235, "object": "result", "squid": "79adf8711330a32e9a07e1748c362f5d", "run": "0ff156b7279b996ab65ab2d24a129a5c", "url": "https://www.facebook.com/SpaceX/", "internal_id": "SpaceX", "name": null, "slug": null, "image_url": null, "likes": null, "followers": null, "visits": null, "wesbite": null, "price": null, "category": null, "menu": null, "instagram": null, "email": null, "address": null, "about": null, "reviews": null, "score": null, "status": "login_required", "phone": null, "functions": null, "native_id": 91235 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-business-page-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Facebook Business Page Scraper settings Configure your Facebook Business Page Scraper squid settings. This scraper has no scraper-specific parameters — only general squid settings are available. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Facebook Business Page Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": {} }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Facebook Business Page Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": {} } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Facebook Business Page Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": {} } ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-comments-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Facebook Comments Scraper squid Add URLs or inputs to your **Facebook Comments Scraper** squid. Crawler ID: `3cf27be3402dbc529ed0db7d18135e8c` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Full URL of the Facebook post, photo, video or reel to collect comments from. Example: `https://www.facebook.com/meta/posts/123456789` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "3cf27be3402dbc529ed0db7d18135e8c", "tasks": [ {"url": "https://www.facebook.com/meta/posts/123456789"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "3cf27be3402dbc529ed0db7d18135e8c", "tasks": [ {"url": "https://www.facebook.com/meta/posts/123456789"} ] } ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.facebook.com/meta/posts/123456789"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/facebook-comments-scraper/credit-cost Credit cost for the Facebook Comments Scraper 1 credit per comment. # Get Results Source: https://docs.lobstr.io/examples/facebook-comments-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Facebook Comments Scraper Retrieve scraped data from your **Facebook Comments Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Unique Facebook identifier of the comment. Example: `123456789_987654321` Direct URL to the comment Facebook identifier of the post Canonical URL of the post Full text content of the comment. Example: `Great post! Thanks for sharing.` Date and time the comment was posted, in UTC. Example: `2026-09-14T16:45:00Z` Language Facebook detected for the comment Display name of the comment author. Example: `Jane Smith` Facebook identifier of the comment author URL of the comment author's Facebook profile URL of the comment author's profile picture Whether the comment was written by the Page owner Whether the comment author has a verified badge Total number of reactions on the comment (all types). Example: `12` Number of Like reactions Number of Love reactions Number of Haha reactions Number of Wow reactions Number of Sad reactions Number of Angry reactions Number of Care reactions Number of replies to this comment Whether this row is a reply to another comment. Example: `false` Nesting depth — 0 for top-level, 1 for a reply. Example: `0` Identifier of the comment this reply answers Display name of the parent comment author Type of media attached (photo, animated\_image, etc.) URL of the media attached to the comment ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"comment_id": "123456789_987654321", "text": "Great post! Thanks for sharing.", "author_name": "Jane Smith", "created_at": "2026-09-14T16:45:00Z", "likes_count": 12, "is_reply": false, "depth": 0}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-comments-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Facebook Comments Scraper settings Configure your **Facebook Comments Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | rows | integer | — | Number of rows returned per API page | | max\_unique\_results\_per\_run | integer | — | Max unique comments across all tasks in the run | | max\_results | integer | — | Total comments per post (top-level + replies combined) | | sort\_by | string | all\_comments | Comment order: `most_relevant` or `all_comments` | | include\_replies | boolean | false | Also collect replies of every top-level comment | | max\_replies | integer | — | Max replies collected per top-level comment | | fetch\_since | string | — | Stop scraping when comments older than this threshold are reached | | fetch\_since\_timezone | string | — | Timezone for fetch\_since | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/3cf27be3402dbc529ed0db7d18135e8c \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_results": 500, "sort_by": "all_comments", "include_replies": true, "max_replies": 50 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/3cf27be3402dbc529ed0db7d18135e8c", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_results": 500, "sort_by": "all_comments", "include_replies": True, "max_replies": 50 } ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"max_results": 500, "sort_by": "all_comments", "include_replies": true, "max_replies": 50}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-group-posts-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Facebook Public Group Posts Scraper squid Add URLs or inputs to your **Facebook Public Group Posts Scraper** squid. Each task object must include the required fields below. Crawler ID: `9b0bb2e04c6f7c475a9da9bb20530dac` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/facebook-group-posts-scraper/credit-cost Credit cost for the Facebook Public Group Posts Scraper 1 credit per post. # Get Results Source: https://docs.lobstr.io/examples/facebook-group-posts-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Facebook Public Group Posts Scraper Retrieve scraped data from your **Facebook Public Group Posts Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the post in the Facebook group. Example: `https://www.facebook.com/groups/211270969394435/permalink/2311529512701893/` Facebook profile URL of the post author. Example: `https://www.facebook.com/groups/211270969394435` Unique identifier for the Facebook post. Example: `2311529512701893` Unique identifier for the Facebook group. Example: `211270969394435` Name of the Facebook group where the post was published. Example: `U.S. Small Business Owners` Unique identifier of the post author on Facebook. Example: `pfbid02g3sw5paCKX5181uQw8EV7kPuEHfhJRyRFawG41QVdgjQnRirbKkJSvXZmwtSQdfRl` Display name of the post author. Example: `Ashraf Khan Ashraf` Full text content of the Facebook group post. Example: `⭐⭐⭐⭐⭐ 100% Permanent & Sticky Reviews – Guaranteed! ⭐⭐⭐⭐⭐ ✅ Non-Drop Reviews with Full Warranty 🔹 Services: ✔️ Google Maps | Trustpilot | Facebook ✔️ Negative Review Removal ✔️ With / Without Image Reviews ✔️ 5⭐ Rating Boost 🌍 Countries Available: 🇺🇸 USA | 🇨🇦 Canada | 🇦🇺 Australia | 🇬🇧 UK 🇩🇪 Germany | 🇫🇷 France | 🇮🇹 Italy | 🇪🇸 Spain 🇳🇱 Netherlands | 🇸🇪 Sweden | 🇳🇴 Norway 🇦🇪 UAE | 🇸🇦 Saudi Arabia 📩 Serious Clients Only — Inbox Now! 📞 WhatsApp: +92 3492324208` Publication date and time of the post in ISO 8601 format. Example: `2026-03-19T11:27:00.000Z` Unix timestamp of when the post was published. Example: `1773919620` Total number of reactions on the post (all types combined). Example: `0` Number of Like reactions on the post. Example: `0` Number of Love reactions on the post. Example: `0` Number of Haha reactions on the post. Example: `0` Number of Wow reactions on the post. Example: `0` Number of Sad reactions on the post. Example: `0` Number of Angry reactions on the post. Example: `0` Number of times the post was shared. Example: `0` Total number of comments on the post. Example: `0` URL of the first image attached to the post Comma-separated list of all image URLs in the post URL of the video attached to the post URL of the external link shared in the post Title of the external link shared in the post JSON array of comments on the post Internal Facebook feedback identifier for the post. Example: `ZmVlZGJhY2s6MjMxMTUyOTUxMjcwMTg5Mw==` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 62811, "object": "result", "squid": "50db20ac20d8b6d97003259f42fc5cd7", "run": "a1f6d5f88993b9747d7d6ab2a582b50a", "url": "https://www.facebook.com/groups/211270969394435/permalink/2311529512701893/", "facebook_url": "https://www.facebook.com/groups/211270969394435", "post_id": "2311529512701893", "group_id": "211270969394435", "group_title": "U.S. Small Business Owners", "user_id": "pfbid02g3sw5paCKX5181uQw8EV7kPuEHfhJRyRFawG41QVdgjQnRirbKkJSvXZmwtSQdfRl", "user_name": "Ashraf Khan Ashraf", "text": "⭐⭐⭐⭐⭐ 100% Permanent & Sticky Reviews – Guaranteed! ⭐⭐⭐⭐⭐\n✅ Non-Drop Reviews with Full Warranty\n🔹 Services:\n✔️ Google Maps | Trustpilot | Facebook\n✔️ Negative Review Removal\n✔️ With / Without Image Reviews\n✔️ 5⭐ Rating Boost\n🌍 Countries Available:\n🇺🇸 USA | 🇨🇦 Canada | 🇦🇺 Australia | 🇬🇧 UK\n🇩🇪 Germany | 🇫🇷 France | 🇮🇹 Italy | 🇪🇸 Spain\n🇳🇱 Netherlands | 🇸🇪 Sweden | 🇳🇴 Norway\n🇦🇪 UAE | 🇸🇦 Saudi Arabia\n📩 Serious Clients Only — Inbox Now!\n📞 WhatsApp: +92 3492324208", "time": "2026-03-19T11:27:00.000Z", "timestamp": 1773919620, "reaction_count": 0, "like_count": 0, "love_count": 0, "haha_count": 0, "wow_count": 0, "sad_count": 0, "angry_count": 0, "share_count": 0, "comments_count": 0, "image_url": null, "image_urls": null, "video_url": null, "link_url": null, "link_title": null, "comments": null, "feedback_id": "ZmVlZGJhY2s6MjMxMTUyOTUxMjcwMTg5Mw==", "functions": null, "native_id": 62811 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-group-posts-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Facebook Group Posts Scraper settings Configure your Facebook Group Posts Scraper squid settings. Control result limits and time-based filtering to target specific posts. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of posts to collect per group | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique posts across all tasks in the run | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | This scraper requires a synced Facebook account. Add your Facebook cookies (`c_user` and `xs`) in the Accounts section before running. Use `fetch_since: 7d` to monitor a group for new posts from the last week. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Facebook Group Posts Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 200, "fetch_since": "7d" } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Facebook Group Posts Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 200, "fetch_since": "7d" } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Facebook Group Posts Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 200, "fetch_since": "7d" } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-marketplace-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Facebook Marketplace search URLs to your scraper squid Add Facebook Marketplace search URLs as tasks to your **Facebook Marketplace Scraper** squid. Each task should be a Marketplace search URL with your desired filters applied. Crawler ID: `640e3d2f62769800fdb05f957f3a2415` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields Facebook Marketplace search URL. Navigate to Marketplace, apply your filters (location, category, price range, etc.), and copy the URL from your browser. Example: `https://www.facebook.com/marketplace/paris/search?query=piano` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.facebook.com/marketplace/paris/search?query=piano" }, { "url": "https://www.facebook.com/marketplace/newyork/search?query=sofa&minPrice=50&maxPrice=500" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_hash, "tasks": [ {"url": "https://www.facebook.com/marketplace/paris/search?query=piano"}, {"url": "https://www.facebook.com/marketplace/newyork/search?query=sofa&minPrice=50&maxPrice=500"}, ] } ) data = response.json() print(f"Tasks added: {len(data)}") ``` ## Response ```json 201 theme={null} [ { "id": "TASK_HASH", "squid": "YOUR_SQUID_HASH", "url": "https://www.facebook.com/marketplace/paris/search?query=piano", "status": "pending" } ] ``` # Credit Cost Source: https://docs.lobstr.io/examples/facebook-marketplace-scraper/credit-cost Credit cost for the Facebook Marketplace Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 1 | 1 credit per listing | | Get Listing Details | 4 | 4 credits per listing, billed once per squid: on later runs, listings this squid already enriched are skipped | # Get Results Source: https://docs.lobstr.io/examples/facebook-marketplace-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped listings from Facebook Marketplace Scraper Retrieve scraped listings from your **Facebook Marketplace Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the Marketplace listing. Example: `https://www.facebook.com/marketplace/item/123456789/` Facebook's internal listing ID. Example: `123456789` Listing title as shown on Marketplace. Example: `Yamaha upright piano — excellent condition` Price amount as a string (no currency symbol). Example: `450` ISO currency code. Example: `EUR` Price with currency symbol as displayed on Marketplace. Example: `€450` City where the item is located. Example: `Paris` Array of listing image URLs. Listing creation date and time (UTC). Example: `2026-07-10T14:23:00` Whether the item has been marked as sold. Whether the listing is currently active. Available delivery methods, comma-separated. Example: `LOCAL_PICKUP, SHIPPING` Marketplace category the listing belongs to. Example: `Musical Instruments` `true` when Facebook lists the listing under "Results from outside your search" (outside your search area, or only loosely related to your query), `false` before that section. Empty on browse and category URLs. To skip these listings, set `exclude_outside_search` in your squid settings. ## Detail Fields The following fields are only populated when `listing_details` is set to `true` in your squid settings. Full listing description text from the detail page. Item condition as listed by the seller. Example: `Used - Good` Precise location text from the listing detail page. Example: `11th arrondissement, Paris` Latitude coordinate of the listing location. Example: `48.8534` Longitude coordinate of the listing location. Example: `2.3488` Display name of the seller. Example: `Marie L.` Facebook ID of the seller. Whether the listing is marked as pending (sale in progress). Whether the listing is hidden from public search. Whether the authenticated scraping account is the seller of this listing. Original price before discount, as a numeric string. Example: `600` Original price before discount, formatted with currency symbol. Example: `€600` Structured listing attributes provided by the seller (condition, brand, size, etc.). ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 89438, "object": "result", "squid": "9f9d8c985d467622ba04fd2a54932402", "run": "0efdbe4671e8df2cc1265ddb7324bf8f", "url": "https://www.facebook.com/marketplace/item/1323925843091629/", "internal_id": "1323925843091629", "title": "Télévision très bon état", "price": "55.00", "currency": "EUR", "formatted_price": "€55", "city": "Lyon", "image_urls": [ "https://scontent.fbcdn.net/img1.jpg", "https://scontent.fbcdn.net/img2.jpg" ], "creation_time": "2025-01-15 14:30:00+00:00", "is_sold": false, "is_live": true, "delivery_types": "IN_PERSON", "category": "TVs", "is_outside_search": false, "description": "Piano rock jam rj661.\nPour les enfants, en bon état.", "condition": "Usado — em boas condições", "location_text": "Lapeyrouse-Mornay, ARA", "latitude": 45.326843, "longitude": 4.993286, "seller_name": "Angelique Przybylski", "seller_id": "1057237320", "is_pending": false, "is_hidden": false, "is_viewer_seller": false, "strikethrough_price": "300", "strikethrough_price_formatted": "£300", "listing_attributes": [ { "attribute_name": "item_condition", "value": "USED_GOOD", "label": "Used - Good" } ], "functions": null, "native_id": 89438 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-marketplace-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure settings for your Facebook Marketplace Scraper squid Update the configuration of your **Facebook Marketplace Scraper** squid. Pass crawler-specific settings inside the `params` object. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Crawler-specific settings. See fields below. ## Settings Fields Maximum number of listings to collect per task. Leave empty for unlimited. Maximum number of unique listings retrieved across all tasks in the entire run. Leave empty for unlimited. Only collect listings published after this point (based on `creation_time`). Use a relative duration (e.g. `"24h"`, `"7d"`, `"2w"`) or an absolute date (`YYYY-MM-DD` or `YYYY-MM-DD HH:MM`). On search URLs, Facebook's matching Date listed filter (last 24 hours, 7 days or 30 days) is added for you. Older listings are skipped and not billed. Timezone for interpreting an absolute `fetch_since` date (e.g. `"Europe/Paris"`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `"24h"` or `"7d"`. Skip the listings Facebook shows under "Results from outside your search" (outside your search area, or only loosely related to your query) and stop paging once that section starts. Skipped listings are not billed. Default: `false`. Visit each listing's detail page to collect additional fields: full description, condition, precise location (latitude/longitude), seller profile, discount price, and structured listing attributes. Requires one additional request per listing. To collect only new listings on a schedule, set `fetch_since` to the schedule interval (`"24h"` for a daily run, `"7d"` for a weekly one). It also applies to the listings under "Results from outside your search", so each run collects, and bills, only the listings published since the previous run. Set `exclude_outside_search` to `true` only if you don't want those listings at all. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Facebook Marketplace Paris", "params": { "max_results": 200, "fetch_since": "24h", "exclude_outside_search": true, "listing_details": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={ "name": "Facebook Marketplace Paris", "params": { "max_results": 200, "fetch_since": "24h", "exclude_outside_search": True, "listing_details": False } } ) data = response.json() print(f"Squid updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "id": "YOUR_SQUID_HASH", "name": "Facebook Marketplace Paris", "crawler": { "id": "facebook-marketplace-scraper", "name": "Facebook Marketplace Scraper", "slug": "facebook-marketplace-scraper" }, "params": { "max_results": 200, "fetch_since": "24h", "exclude_outside_search": true, "listing_details": false }, "concurrency": 1, "export_unique_results": true, "to_complete": true, "no_line_breaks": false, "status": "idle" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-pages-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add Facebook Pages search URLs to scrape Add Facebook Pages search URLs to scrape business pages. The scraper extracts page information including contact details, follower counts, and social links. Crawler ID: `c47dfc2beba9fdc2472d3b3321b06b66` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Facebook Pages Search Export crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Facebook Pages search URL (e.g., `https://www.facebook.com/search/pages?q=coffee%20shop`) | Perform your search on Facebook first, then copy the URL to preserve all search parameters. Facebook Pages search URLs follow the format: `https://www.facebook.com/search/pages?q=YOUR_SEARCH_QUERY` where the query should be URL-encoded. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.facebook.com/search/pages?q=coffee%20shop" } ] }' ``` ```python Python theme={null} import requests from urllib.parse import quote API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Build Facebook Pages search URL search_query = quote("coffee shop") search_url = f"https://www.facebook.com/search/pages?q={search_query}" # Add Facebook Pages search task response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": search_url} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.facebook.com/search/pages?q=coffee%20shop" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/facebook-pages-search-export/credit-cost Credit cost for the Facebook Pages Search Export 1 credit per page. # Get Results Source: https://docs.lobstr.io/examples/facebook-pages-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Facebook Pages Search Export Retrieve scraped data from your **Facebook Pages Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the Facebook page. Example: `https://www.facebook.com/gagnantgagnantbarajeux` Name of the Facebook page. Example: `Bar à jeux Bordeaux : Gagnant Gagnant` URL slug of the Facebook page (e.g. used in facebook.com/slug). Example: `gagnantgagnantbarajeux` Category of the Facebook page (e.g. Restaurant, Brand). Example: `Bar` Map link for the Facebook page's location. Example: `https://maps.google.com/maps?q=39+quai+de+bacalan%2C+Bordeaux%2C+France` Full address of the Facebook page's location. Example: `39 quai de bacalan, Bordeaux, France, 33300` Phone number listed on the Facebook page. Example: `06 28 32 57 39` Total number of likes on the Facebook page. Example: `576` Total number of followers of the Facebook page. Example: `576` Email address listed on the Facebook page. Example: `barajeuxbordeaux@gmail.com` Website URL linked to the Facebook page. Example: `https://gg33.fr/le-bar-a-jeux/` Instagram profile URL linked to the Facebook page. Example: `https://www.instagram.com/gagnant_gagnant` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 70787, "object": "result", "squid": "fee4f12fb05379a20b11580c92cbf773", "run": "2ae617390e6a9a0db9483aef252be133", "url": "https://www.facebook.com/gagnantgagnantbarajeux", "name": "Bar à jeux Bordeaux : Gagnant Gagnant", "slug": "gagnantgagnantbarajeux", "category": "Bar", "map_url": "https://maps.google.com/maps?q=39+quai+de+bacalan%2C+Bordeaux%2C+France", "address": "39 quai de bacalan, Bordeaux, France, 33300", "phone": "06 28 32 57 39", "likes": 576, "followers": 576, "email": "barajeuxbordeaux@gmail.com", "website": "https://gg33.fr/le-bar-a-jeux/", "instagram": "https://www.instagram.com/gagnant_gagnant", "functions": null, "native_id": 70787 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-pages-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Facebook Pages Search Export settings Configure your Facebook Pages Search Export squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of pages to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Facebook Pages Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": {} }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Facebook Pages Search Export (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": {} # No scraper-specific parameters } ) print(response.json()) ``` ## Response ```json 201 theme={null} { "name": "Facebook Pages Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": {} } ``` # Add Tasks Source: https://docs.lobstr.io/examples/facebook-private-group-posts/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Facebook Private Group Posts Scraper squid Add URLs or inputs to your **Facebook Private Group Posts Scraper** squid. Each task object must include the required fields below. This scraper requires a connected Facebook account. Go to your squid settings and link your Facebook cookies (`c_user` and `xs`) before running. Crawler ID: `3eea12bc7d80cf05b6fc38eaf9f28f77` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields URL of a Facebook group to collect posts from. Example: `https://www.facebook.com/groups/336266723393832` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.facebook.com/groups/336266723393832" }, { "url": "https://www.facebook.com/groups/another_group_id" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_hash, "tasks": [ {"url": "https://www.facebook.com/groups/336266723393832"}, {"url": "https://www.facebook.com/groups/another_group_id"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2025-06-24T11:11:30.222467", "is_active": true, "params": { "url": "https://www.facebook.com/groups/336266723393832" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/facebook-private-group-posts/credit-cost Credit cost for the Facebook Private Group Posts Scraper 1 credit per post # Get Results Source: https://docs.lobstr.io/examples/facebook-private-group-posts/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Facebook Private Group Posts Scraper Retrieve scraped data from your **Facebook Private Group Posts Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from. Hash of a specific run (optional). Page number (default: 1). Results per page (default: 50, max: 100). ## Result Fields Direct URL to the post in the Facebook group. Example: `https://www.facebook.com/groups/336266723393832/permalink/123456789/` Unique identifier for the Facebook post. Example: `123456789` Unique identifier for the Facebook group. Example: `336266723393832` Name of the Facebook group where the post was published. Example: `My Group` Unique identifier of the post author on Facebook. Display name of the post author. Example: `John Doe` Full text content of the post. Publication date and time of the post in ISO 8601 format. Example: `2026-03-19T11:27:00.000Z` Unix timestamp of when the post was published. Example: `1773919620` Total number of likes on the post. Example: `12` Total number of comments on the post. Example: `5` Number of times the post was shared. Example: `2` Number of Like reactions. Example: `10` Number of Love reactions. Example: `2` Number of Haha reactions. Example: `0` Number of Wow reactions. Example: `0` Number of Sad reactions. Example: `0` Number of Angry reactions. Example: `0` URL of the first image attached to the post. URL of the second image attached to the post. URL of the video attached to the post. URL of the external link shared in the post. Text of the first comment on the post. Text of the second comment on the post. Internal Facebook feedback identifier for the post. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=1&page_size=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} params = { "squid": "YOUR_SQUID_HASH", "page": 1, "page_size": 50 } all_results = [] url = f"{BASE_URL}/results" while True: response = requests.get(url, headers=headers, params=params) data = response.json() all_results.extend(data["data"]) print(f"Fetched page {data['page']} of {data['total_pages']}") if data["next"] is None: break url = data["next"] params = {} print(f"\nTotal posts collected: {len(all_results)}") for post in all_results[:5]: print(f"- {post.get('user_name')}: {post.get('text', '')[:80]}") ``` ## Response ```json 200 theme={null} { "total_results": 42, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 42, "data": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "url": "https://www.facebook.com/groups/336266723393832/permalink/123456789/", "post_id": "123456789", "group_id": "336266723393832", "group_title": "My Private Group", "user_id": "987654321", "user_name": "John Doe", "text": "Hello everyone! Check out this great resource...", "time": "2026-03-19T11:27:00.000Z", "timestamp": 1773919620, "likes_count": 12, "comments_count": 5, "shares_count": 2, "reaction_like_count": 10, "reaction_love_count": 2, "reaction_haha_count": 0, "reaction_wow_count": 0, "reaction_sad_count": 0, "reaction_angry_count": 0, "image_1": null, "image_2": null, "video_url": null, "link_attachment": "https://example.com/resource", "comment_1": "Great post!", "comment_2": "Thanks for sharing.", "feedback_id": "ZmVlZGJhY2s6MTIzNDU2Nzg5", "scraping_time": "2026-03-20T09:15:00.000Z" } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/facebook-private-group-posts/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure settings for your Facebook Private Group Posts Scraper squid Update the configuration of your **Facebook Private Group Posts Scraper** squid. Pass crawler-specific settings inside the `params` object. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Crawler-specific settings. See fields below. ## Settings Fields Only collect posts published after this point. Use a relative duration (e.g. `"24h"`, `"7d"`, `"2w"`) or an absolute date (`YYYY-MM-DD`). Timezone for interpreting an absolute `fetch_since` date (e.g. `"Europe/Paris"`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `"24h"` or `"7d"`. Set `fetch_since` to `null` to collect all posts, or use a relative duration (`"24h"`, `"7d"`, `"2w"`) or absolute date (`YYYY-MM-DD`) to collect only recent posts. When using an absolute date, set `fetch_since_timezone` to interpret it in the correct timezone (e.g. `"Europe/Paris"`). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Facebook Private Group Posts", "params": { "fetch_since": "7d", "fetch_since_timezone": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={ "name": "Facebook Private Group Posts", "params": { "fetch_since": "7d", # relative: "24h", "7d", "2w" | absolute: "2026-01-01" "fetch_since_timezone": None # e.g. "Europe/Paris" — only used with absolute fetch_since } } ) data = response.json() print(f"Squid updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "id": "YOUR_SQUID_HASH", "name": "Facebook Private Group Posts", "crawler": { "id": "3eea12bc7d80cf05b6fc38eaf9f28f77", "name": "Facebook Private Group Posts Scraper", "slug": "facebook-private-group-posts" }, "params": { "fetch_since": "7d", "fetch_since_timezone": null }, "concurrency": 1, "export_unique_results": true, "to_complete": true, "no_line_breaks": false, "status": "idle", "created_at": "2025-01-20T10:15:00.000000", "updated_at": "2025-01-27T14:35:00.000000" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/glassdoor-jobs-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Glassdoor Jobs Scraper squid Add URLs or inputs to your **Glassdoor Jobs Scraper** squid. Crawler ID: `4bc153aae1e138d894b630bf165825ee` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Glassdoor job search URL, keyword, or single job posting link. Example: `https://www.glassdoor.com/Job/new-york-python-developer-jobs-SRCH_IL.0,8_IC1132348_KO9,25.htm` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "4bc153aae1e138d894b630bf165825ee", "tasks": [ {"url": "https://www.glassdoor.com/Job/new-york-python-developer-jobs-SRCH_IL.0,8_IC1132348_KO9,25.htm"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "4bc153aae1e138d894b630bf165825ee", "tasks": [ {"url": "https://www.glassdoor.com/Job/new-york-python-developer-jobs-SRCH_IL.0,8_IC1132348_KO9,25.htm"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.glassdoor.com/Job/new-york-python-developer-jobs-SRCH_IL.0,8_IC1132348_KO9,25.htm"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/glassdoor-jobs-scraper/credit-cost Credit cost for the Glassdoor Jobs Scraper 1 credit per job posting. # Get Results Source: https://docs.lobstr.io/examples/glassdoor-jobs-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Glassdoor Jobs Scraper Retrieve scraped data from your **Glassdoor Jobs Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Glassdoor's unique identifier for the job listing. Example: `JV_KO0,25_KE26,32.htm` Job title as published by the employer. Example: `Senior Python Developer` Glassdoor's normalised version of the job title. Example: `Software Engineer` Direct link to the job listing on Glassdoor. Example: `https://www.glassdoor.com/job-listing/senior-python-developer-acme-corp-JV_KO0,25_KE26,32.htm` Canonical SEO link to the job listing. Example: `https://www.glassdoor.com/job-listing/senior-python-developer-acme-corp-JV_KO0,25_KE26,32.htm` Date the job was posted. Example: `2026-09-13T00:00:00Z` Age of the listing in whole days. Example: `2` True when the job can be applied to directly on Glassdoor. Example: `false` True when Glassdoor flags the listing as expired. Example: `false` True when the listing is a paid placement. Example: `false` True when the employer is a paid advertiser. Example: `false` Job location as displayed on Glassdoor. Example: `New York, NY` Granularity of location: C (city), S (state), N (country). Example: `C` Glassdoor's internal country identifier. Example: `1` Low end of Glassdoor's pay estimate (10th percentile). Example: `120000` Median of Glassdoor's pay estimate (50th percentile). Example: `150000` High end of Glassdoor's pay estimate (90th percentile). Example: `180000` Period of salary figures, e.g. ANNUAL or HOURLY. Example: `ANNUAL` ISO currency code of the salary figures. Example: `USD` Where the salary comes from (EMPLOYER\_PROVIDED or Glassdoor estimate). Example: `EMPLOYER_PROVIDED` True when salary was provided by the employer. Example: `true` Glassdoor's identifier for the hiring company. Example: `1234567` Name of the hiring company. Example: `Acme Corp` Short display name of the hiring company. Example: `Acme` Overall Glassdoor rating, from 0 to 5. Example: `4.2` URL of the company logo. Example: `https://media.glassdoor.com/sql/1234567/acme-squareLogo.png` Glassdoor's occupation category for the job. Example: `Software Engineer` Glassdoor's numeric identifier for the occupation category. Example: `10014` Full job description (HTML included). Full job description as plain text. Employment type(s), comma separated. Example: `FULL_TIME` Remote-work flag(s), comma separated. Example: `REMOTE` Education requirements, comma separated. Example: `Bachelor's Degree` Years of experience required. Example: `3-5 years` Skills attached to the listing, comma separated. Example: `Python, Django, REST API` Date Glassdoor last (re)discovered the listing. Example: `2026-09-13T08:00:00Z` Link that starts the application. Example: `https://www.acme.com/careers/apply/12345` State or region of the job. Example: `NY` Country of the job. Example: `United States` Postal code of the job location. Example: `10001` Latitude of the job location. Example: `40.7128` Longitude of the job location. Example: `-74.006` Link to the company's Glassdoor profile. Example: `https://www.glassdoor.com/Overview/Working-at-Acme-Corp-EI_IE1234567.htm` Headquarters of the company. Example: `123 Main St, New York, NY 10001` Type of company, e.g. Company - Private. Example: `Company - Private` Year the company was founded. Example: `2005` Company size bucket. Example: `1001 to 5000 Employees` Glassdoor's company size category. Example: `MID_SIZE` Estimated revenue bucket. Example: `$100 to $500 million (USD)` Industry of the company. Example: `Software Development` Sector of the company. Example: `Information Technology` The company's own website. Example: `https://www.acme.com` Work-life balance rating, from 0 to 5. Example: `3.8` Compensation and benefits rating, from 0 to 5. Example: `3.9` Senior management rating, from 0 to 5. Example: `3.5` Culture and values rating, from 0 to 5. Example: `4.0` Career opportunities rating, from 0 to 5. Example: `3.7` Share of reviewers who approve of the CEO, 0 to 1. Example: `0.72` Number of reviews behind the CEO approval score. Example: `312` Name of the company CEO. Example: `Jane Smith` Share who would recommend the company, 0 to 1. Example: `0.68` Total number of company reviews on Glassdoor. Example: `1847` Benefits rating, from 0 to 5. Example: `3.9` Number of benefit reviews. Example: `423` Review highlight sentences from company reviews. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=4bc153aae1e138d894b630bf165825ee" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "4bc153aae1e138d894b630bf165825ee", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"job_id": "JV_KO0,25_KE26,32.htm", "title": "Senior Python Developer", "company_name": "Acme Corp", "location": "New York, NY", "salary_min": 120000, "salary_median": 150000, "salary_max": 180000, "salary_currency": "USD", "company_rating": 4.2, "posted_at": "2026-09-13T00:00:00Z"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/glassdoor-jobs-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Glassdoor Jobs Scraper settings Configure your **Glassdoor Jobs Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | location | string | — | City, state or country to search in, e.g. 'New York, NY' | | date\_posted | string | Any time | Only collect jobs posted within this window: Any time, Last 24 hours, Last 3 days, Last 7 days, Last 14 days, Last 30 days | | job\_type | string | Any | Employment type: Any, Full-time, Part-time, Contract, Temporary, Intern | | seniority | string | Any | Seniority level: Any, Internship, Entry Level, Mid Level, Senior Level, Director, Executive | | remote\_only | boolean | false | Only collect jobs flagged as remote | | easy\_apply | boolean | false | Only collect jobs that can be applied to directly on Glassdoor | | salary\_min | integer | — | Min yearly salary in local currency | | salary\_max | integer | — | Max yearly salary in local currency | | company\_rating | string | Any | Only collect jobs from companies rated at least this (2.0, 2.5, 3.0, 3.5, 4.0) | | company\_size | string | Any | Only from companies of this size | | industry | string | Any | Only from companies in this industry | | job\_function | string | Any | Only jobs in this job function | | radius | string | Within 50 km | How far around the location to search | | sort\_by | string | Relevance | Relevance or Most recent | | job\_details | boolean | true | Open every job to collect full description, employment type, salary, company info | | max\_results | integer | 900 | Max jobs per search (Glassdoor max \~900) | | max\_unique\_results\_per\_run | integer | — | Max unique jobs across all tasks in the run | | fetch\_since | string | — | Only collect jobs posted after this threshold | | fetch\_since\_timezone | string | — | Timezone for fetch\_since | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/4bc153aae1e138d894b630bf165825ee \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "location": "New York, NY", "date_posted": "Last 7 days", "job_type": "Full-time", "seniority": "Mid Level", "job_details": true, "max_results": 900 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/4bc153aae1e138d894b630bf165825ee", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "location": "New York, NY", "date_posted": "Last 7 days", "job_type": "Full-time", "seniority": "Mid Level", "job_details": True, "max_results": 900, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"location": "New York, NY", "date_posted": "Last 7 days", "job_type": "Full-time", "seniority": "Mid Level", "job_details": true, "max_results": 900}} ``` # Add Task Params Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/add-task-params POST https://api.lobstr.io/v1/tasks Add structured search tasks using city, category, and location parameters Use this format to dynamically define search inputs using structured metadata like city, category, and country. Location values can be obtained from the Get Geolocation endpoint. This method is ideal for automation and scaling across regions. Crawler ID: `4734d096159ef05210e0e1677e8be823` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Task Parameters | Field | Type | Required | Description | | - | - | - | - | | **city** | string | Yes | City name with postal code (e.g., `Alpine 91901`) | | **category** | string | Yes | Business category to search (e.g., `restaurant`) | | **country** | string | No | Country name (e.g., `United States`) | | **region** | string | No | State or province (e.g., `California`) | | **district** | string | No | County or local district (e.g., `San Diego`) | ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the google-maps-leads-scraper crawler | | **tasks** | array | Yes | Array of task objects with location parameters | Use the Get Geolocation endpoint to fetch valid values for city, region, and district. The `city` field must include the postal code (e.g., `Anaheim 92801`). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "city": "Alpine 91901", "category": "restaurant", "country": "United States", "region": "California", "district": "San Diego" }, { "city": "Anaheim 92801", "category": "restaurant", "country": "United States" } ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add parameter-based tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ { "city": "Alpine 91901", "category": "restaurant", "country": "United States", "region": "California", "district": "San Diego" }, { "city": "Anaheim 92801", "category": "restaurant", "country": "United States" } ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['city']} - {task['params']['category']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "c3113ec3820d0253e2130b23f5b01a74", "created_at": "2025-06-24T11:11:30.222467", "is_active": true, "params": { "city": "Alpine 91901", "category": "restaurant", "country": "United States", "region": "California", "district": "San Diego" }, "module": 5, "object": "task" }, { "id": "d3deeac80b3dff7be992bb7f5d4ce63d", "created_at": "2025-06-24T11:11:30.222613", "is_active": true, "params": { "city": "Anaheim 92801", "category": "restaurant", "country": "United States" }, "module": 5, "object": "task" } ] } ``` # Add Task URLs Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/add-task-urls POST https://api.lobstr.io/v1/tasks Add Google Maps search URLs to scrape places from Use this format if you already have a direct Google Maps search or place URL. This is best for manual inputs or small-scale targeted searches. Crawler ID: `4734d096159ef05210e0e1677e8be823` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## URL Format **Google Maps search URL:** `https://www.google.com/maps/search/restaurant/@43.3928346,5.2662584,14z` The URL contains the search query and coordinates for the search area. ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the google-maps-leads-scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | Only the `url` key is required in each task object. URLs must match Google Maps search or place format. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "url": "https://www.google.com/maps/search/restaurant/@43.3928346,5.2662584,14z" } ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add URL-based tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.google.com/maps/search/restaurant/@43.3928346,5.2662584,14z"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicated: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "4ed8a673a01ba193cc43476e60abc5c0", "created_at": "2025-06-24T11:13:05.720012", "is_active": true, "params": { "url": "https://www.google.com/maps/search/restaurant/@43.3928346,5.2662584,14z" }, "module": 5, "object": "task" } ] } ``` # Configure Chain Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/configure-chain POST https://api.lobstr.io/v1/squids/{squid_hash}/chain Automatically feed Google Maps leads into a Google Maps Reviews scrape Once your Google Maps Leads Scraper squid collects place URLs, you can chain it to a **Google Maps Reviews Scraper** so that reviews are fetched automatically for every place found — no manual steps required. When a leads run completes with a status of `DONE`, the scheduler extracts the `url` field from each result and queues it as a task on the reviews squid, then starts a new run. Runs that end in `ERROR` do not trigger the chain. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Request Body Hash ID of the Google Maps Reviews Scraper crawler. Retrieve it from `GET /v1/crawlers`. Maps the `url` field from leads results to the `url` input on the reviews crawler. Always `{"url": "url"}` for this chain. Whether the reviews run starts automatically. Defaults to `true`. Name for the auto-created reviews squid. Example: `"Google Maps Reviews (chained)"`. Concurrency for the reviews squid. Defaults to `1`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_LEADS_SQUID_HASH/chain" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "target_module_id": "GOOGLE_MAPS_REVIEWS_CRAWLER_HASH", "field_map": {"url": "url"}, "autostart": true, "cluster_name": "Google Maps Reviews (chained)", "cluster_concurrency": 3 }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = { "Authorization": f"Token {API_KEY}", "Content-Type": "application/json" } leads_squid_id = "YOUR_LEADS_SQUID_HASH" response = requests.post( f"{BASE_URL}/squids/{leads_squid_id}/chain", headers=headers, json={ "target_module_id": "GOOGLE_MAPS_REVIEWS_CRAWLER_HASH", "field_map": {"url": "url"}, "autostart": True, "cluster_name": "Google Maps Reviews (chained)", "cluster_concurrency": 3 } ) chain = response.json() print(f"Chain configured: {chain['id']}") print(f"Target crawler: {chain['target_module']['public_name']}") print(f"Autostart: {chain['autostart']}") ``` ## Response ```json 201 theme={null} { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "target_module": { "id": "9a3f1c8b2e7d4a56f0e1b2c3d4e5f678", "public_name": "Google Maps Reviews Scraper", "name": "googlemapreviews_matrix", "max_concurrency": 10 }, "target_cluster": null, "field_map": {"url": "url"}, "is_active": true, "autostart": true, "cluster_name": "Google Maps Reviews (chained)", "cluster_concurrency": 3, "created_at": "2026-04-28T10:00:00Z" } ``` `target_cluster` is `null` until the first leads run completes and triggers the chain. After that it will contain the auto-created reviews squid. Set `autostart: false` if you want to review the queued tasks before the reviews run starts. # Credit Cost Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/credit-cost Credit cost for the Google Maps Leads Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Local Businesses | 1 | 1 credit per row. | | Extract Emails from Website | 1 | 1 credit per row if any email address is found. No email found = 0 credits. | | Verify Emails | 2 | 2 credits per email if the status is valid or unknown. Invalid = 0 credits. | | Collect Business Details | 1 | 1 credit per row. | | Fetch Business Images | 1 | 1 credit per local business, including up to 250 images. | # Get Geolocation Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/get-geolocation GET https://api.lobstr.io/v1/googlemaps/locations Fetch valid regions, districts, and cities for parameter-based tasks Use this endpoint to fetch valid regions, districts, and cities used in parameter-based tasks for the Google Maps Search Export crawler. This is essential when constructing structured tasks where accurate location inputs are required. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters ISO 2-letter country code. Example: `US` State or province name. Example: `California` County or local district. Example: `San Diego` City name filter ## How It Works The value you leave empty determines what the API returns: * Leave `region` empty to get **regions** for a country * Provide `region`, leave `city` empty to get **cities** in that region * Provide `district` to narrow down the city list further ## Query Parameters | Parameter | Required | Description | | - | - | - | | **country\_code** | Yes | ISO 2-letter country code (e.g., `US`, `FR`, `PK`) | | **region** | Conditional | Required when querying districts or cities. Leave empty to get regions. | | **district** | No | Narrows the city list within a region | | **city** | No | Used when retrieving a refined list of locations | Use the returned values for `region`, `district`, and `city` in parameter-based tasks. Combine location values with `category` to generate accurate search inputs. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/googlemaps/locations?country_code=US®ion=California&city" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} # Get cities in California, US response = requests.get(f"{BASE_URL}/googlemaps/locations", headers=headers, params={ "country_code": "US", "region": "California", "city": "" } ) cities = response.json() print(f"Found {len(cities)} cities") for city in cities[:10]: print(f" {city}") ``` ## Response ```json 200 theme={null} [ "Acampo 95220", "Acton 93510", "Adelanto 92301", "Adin 96006", "Agoura Hills 91301", "Agoura Hills 91376", "Aguanga 92536", "Ahwahnee 93601", "Alameda 94501", "Alameda 94502", "Alamo 94507", "Albany 94706", "Albion 95410", "Alderpoint 95511", "Alhambra 91801", "Alhambra 91802", "Alhambra 91803" ] ``` # Get Results Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Google Maps Leads Scraper Retrieve scraped data from your **Google Maps Leads Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Whether the result passed your geo and category filters. Example: `true` Reasons why the result did not match your filters Internal Google Maps hex identifier for the business. Example: `0x30e29f5331420fff:0x40714ec1d130200a` Google Maps unique numeric business identifier (CID). Example: `4643579285140938762` Google Places API unique identifier for the business. Example: `ChIJ_w9CMVOf4jARCiAw0cFOcUA` Direct Google Maps URL to the business listing. Example: `https://www.google.com/maps?cid=4643579285140938762` Business name as listed on Google Maps. Example: `The Mesh Bangkok Sukhumvit 22` Full formatted address of the business. Example: `30 Sukhumvit Alley 22, Khwaeng Khlong Toei, Khlong Toei, Bangkok 10110` Country where the business is located. Example: `Thailand` ISO 2-letter country code. Example: `TH` Postal or ZIP code of the business. Example: `10110` City where the business is located. Example: `Khlong Toei` Neighborhood extracted from the address components. Example: `Marais` Latitude coordinate of the business. Example: `13.7296173` Longitude coordinate of the business. Example: `100.5650145` Total number of Google reviews. Requires `collect_business_details`. Example: `56` Average star rating out of 5. Example: `4.8` Primary business category on Google Maps. Example: `Bar, Restaurant, Sports bar` URL of the business's main cover image Primary phone number of the business. Example: `+6622620000` Business website URL. Example: `https://www.themeshbangkoksukhumvit22.com/` Link to the business menu. Example: `https://shorturl.at/JJPdY` Google Plus Code short address. Example: `PHH8+R2 Bangkok` Whether the business is temporarily closed. Example: `false` Whether the business is permanently closed. Example: `false` Whether the listing has a verified owner on Google Maps. Example: `true` Weekly opening hours schedule. Example: `Monday: 6 AM–1 AM, Tuesday: 6 AM–1 AM, Wednesday: 6 AM–1 AM, Thursday: 6 AM–1 AM, Friday: 6 AM–1 AM, Saturday: 6 AM–1 AM, Sunday: 6 AM–1 AM` Points of interest and amenity tags listed on the business. Example: `Outdoor seating, Takeaway, Dine-in, Delivery (no), Great beer selection, Great cocktails, Live music, Live performances, Sport, Solo dining, Wheelchair-accessible car park, Wheelchair-accessible entrance, Wheelchair-accessible seating, Assistive hearing loop (no), Alcohol, Beer, Cocktails, Food, Food at bar, Happy-hour drinks, Spirits, Wine, Seating, Table service, Toilet, Wi-Fi, Casual, Cosy, Trendy, Groups, LGBTQ+ friendly, Tourists, Transgender safe space, Accepts reservations, Credit cards, Debit cards, NFC mobile payments, Free parking lot, On-site parking` Editorial or business-provided description from Google Maps Price range indicator (e.g. €, ££, \$\$\$) When the opening hours were last confirmed or updated. Example: `2026-02-28` Total number of images on the Google Maps listing. Example: `223` List of all business image URLs. Example: `['https://lh3.googleusercontent.com/p/AF1QipMJGL4SUHrk012w95hubI9iiBHjRBIdo_JhTTf4=w203-h135-k-no', 'https://lh3.googleusercontent.com/gps-cs-s/AHVAwersyBIZuM31K0lIkj2MprffMbJbLi-KNIvW3H4ImbuE6HFjzv-kpZjLRuhIHiFR0jZTqrIOYuPhmCsuZ4AB90i-m-PJwalWyRmCdrcByR98rD4qe9TIJCO6AW5FvDVhdEmVubuoqKBGlBGt=w203-h360-k-no', 'https://lh3.googleusercontent.com/gps-cs-s/AHVAwepLZcxTIYOCVWAFGuq4eqD42U4K_9XpR0CHbL5uInMdYzWoHQCsEK0usvXdn1slJC-Tljb5tQqWh-jfg6bUWgjhhZy52kraloIZJGY4mLfeaDfpb-gjpO0CzdGRAivc_x-m7S4ow1-GwIFN=w236-h100-k-no']` Health and safety attributes of the business. Example: `false` Short summary about the business from Google Maps Crowd and inclusivity attributes (e.g. LGBTQ+ friendly). Example: `Groups, LGBTQ+ friendly, Tourists, Transgender safe space` Available amenities at the business Email address found on the business website. Example: `marriottdpo@marriott.com,privacy@marriott.com,themesh@fourpoints.com` Validation status of the extracted email address. Example: `invalid,valid,valid,invalid,valid,valid,invalid` Date and time the email address was verified. Example: `2026-02-28T01:19:47+00:00` Facebook profile URL found on the business website. Example: `https://www.facebook.com/marriottbonvoy, https://www.facebook.com/themeshbangkoksukhumivit22` Instagram profile URL found on the business website. Example: `https://www.instagram.com/themeshbangkok, https://www.instagram.com/marriottbonvoy` LinkedIn company page URL found on the business website. Example: `https://www.linkedin.com/in/anthony-capuano-a68390bb, https://www.linkedin.com/company/marriott-international` Twitter/X profile URL found on the business website. Example: `https://twitter.com/marriottbonvoy` TikTok profile URL found on the business website WhatsApp contact URL found on the business website Pinterest profile URL found on the business website Secondary phone number found on the business website. Example: `+6622620000` Number of 1-star reviews. Example: `1` Number of 2-star reviews. Example: `1` Number of 3-star reviews. Example: `1` Number of 4-star reviews. Example: `5` Number of 5-star reviews. Example: `48` Service options available at the business, as `{name, available}` objects. Example: `[{"name": "Dine-in", "available": true}, {"name": "Takeaway", "available": true}, {"name": "Delivery", "available": false}]` Accessibility features, as `{name, available}` objects. Example: `[{"name": "Wheelchair-accessible entrance", "available": true}]` Business highlights, as `{name, available}` objects. Example: `[{"name": "Live music", "available": true}, {"name": "Sport", "available": true}]` Accepted payment methods, as `{name, available}` objects. Example: `[{"name": "Credit cards", "available": true}, {"name": "NFC mobile payments", "available": true}]` Google Knowledge Graph ID of the business. Example: `/g/11rz7_3hkb` Direct link to the business's Google reviews page Cleaned business name for email personalization — no punctuation or accents. Example: `The Mesh Bangkok Sukhumvit 22` Whether the listing is claimed and verified by its owner on Google Maps. Example: `true` Whether the business serves customers at their location instead of a fixed storefront Street-level portion of the business address. Example: `30 Sukhumvit Alley 22` County-level administrative division (US). Example: `Cook County` Two-letter state code (US). Example: `IL` First-level administrative division: state, province, or region. Example: `Île-de-France` IANA timezone of the business location. Example: `America/New_York` Street View thumbnail image URL for the business location Display name of the listing owner profile on Google Maps Stable Google Maps owner/contributor ID Link to the owner's Google Maps profile Posts published by the business owner (updates, events, offers) Posts published by customers about the business Photo gallery category labels available on the listing (e.g. Food and drink, Exterior, Interior) Structured menu with dishes: section, description, price, and photo. Requires `collect_business_details`. Typical spend range reported by Google. Example: `$20–80` Direct reservation or booking URL for the business Typical busy times by day and hour (relative busyness 0–100) Live crowd level right now (only available when the place is open and Google has live data) Live busyness percentage right now (0–100) Secondary opening-hours sets: delivery, drive-through, kitchen, etc. Action buttons available on the Google Maps listing (e.g. order online, reserve a table) Online food ordering providers available for the business (e.g. Uber Eats, DoorDash) YouTube channel URL found on the business website Keywords most mentioned in reviews, with mention counts. Example: `[{"key": "tacos", "count": 42}]` Related businesses Google shows under "People also search for" Timestamp when the result was scraped ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 50231, "object": "result", "squid": "05d966bcc86f48b6afca3de8a0a0dc5e", "run": "401314a9bf2547c984a3c5d335273a56", "match_filters": true, "no_match_reasons": "", "zero_x": "0x30e29f5331420fff:0x40714ec1d130200a", "cid": "4643579285140938762", "place_id": "ChIJ_w9CMVOf4jARCiAw0cFOcUA", "url": "https://www.google.com/maps?cid=4643579285140938762", "name": "The Mesh Bangkok Sukhumvit 22", "address": "30 Sukhumvit Alley 22, Khwaeng Khlong Toei, Khlong Toei, Bangkok 10110", "country_name": "Thailand", "country_code": "TH", "zip_code": "10110", "city": "Khlong Toei", "neighborhood": "Kitisuru", "lat": 13.7296173, "lng": 100.5650145, "ratings": 56, "score": 4.8, "category": "Bar, Restaurant, Sports bar", "main_image_url": null, "phone": "+6622620000", "website": "https://www.themeshbangkoksukhumvit22.com/", "menu": "https://shorturl.at/JJPdY", "plus_code": "PHH8+R2 Bangkok", "is_temporarily_closed": false, "is_permanently_closed": false, "has_owner": true, "opening_hours": "Monday: 6 AM–1 AM, Tuesday: 6 AM–1 AM, Wednesday: 6 AM–1 AM, Thursday: 6 AM–1 AM, Friday: 6 AM–1 AM, Saturday: 6 AM–1 AM, Sunday: 6 AM–1 AM", "poi": "Outdoor seating, Takeaway, Dine-in, Delivery (no), Great beer selection, Great cocktails, Live music, Live performances, Sport, Solo dining, Wheelchair-accessible car park, Wheelchair-accessible entrance, Wheelchair-accessible seating, Assistive hearing loop (no), Alcohol, Beer, Cocktails, Food, Food at bar, Happy-hour drinks, Spirits, Wine, Seating, Table service, Toilet, Wi-Fi, Casual, Cosy, Trendy, Groups, LGBTQ+ friendly, Tourists, Transgender safe space, Accepts reservations, Credit cards, Debit cards, NFC mobile payments, Free parking lot, On-site parking", "description": null, "price": null, "last_opening_hours_updated_at": "2026-02-28", "images_count": 223, "images": [ "https://lh3.googleusercontent.com/p/AF1QipMJGL4SUHrk012w95hubI9iiBHjRBIdo_JhTTf4=w203-h135-k-no", "https://lh3.googleusercontent.com/gps-cs-s/AHVAwersyBIZuM31K0lIkj2MprffMbJbLi-KNIvW3H4ImbuE6HFjzv-kpZjLRuhIHiFR0jZTqrIOYuPhmCsuZ4AB90i-m-PJwalWyRmCdrcByR98rD4qe9TIJCO6AW5FvDVhdEmVubuoqKBGlBGt=w203-h360-k-no", "https://lh3.googleusercontent.com/gps-cs-s/AHVAwepLZcxTIYOCVWAFGuq4eqD42U4K_9XpR0CHbL5uInMdYzWoHQCsEK0usvXdn1slJC-Tljb5tQqWh-jfg6bUWgjhhZy52kraloIZJGY4mLfeaDfpb-gjpO0CzdGRAivc_x-m7S4ow1-GwIFN=w236-h100-k-no" ], "health": false, "about": null, "crowd": "Groups, LGBTQ+ friendly, Tourists, Transgender safe space", "amenities": null, "email": "marriottdpo@marriott.com,privacy@marriott.com,themesh@fourpoints.com", "email_status": "invalid,valid,valid,invalid,valid,valid,invalid", "email_verified_at": "2026-02-28T01:19:47+00:00", "facebook": "https://www.facebook.com/marriottbonvoy, https://www.facebook.com/themeshbangkoksukhumivit22", "instagram": "https://www.instagram.com/themeshbangkok, https://www.instagram.com/marriottbonvoy", "linkedin": "https://www.linkedin.com/in/anthony-capuano-a68390bb, https://www.linkedin.com/company/marriott-international", "twitter": "https://twitter.com/marriottbonvoy", "tiktok": "https://www.tiktok.com/@mybrand", "whatsapp": "https://wa.me/+12125551234", "pinterest": "https://www.pinterest.com/mybrand/", "additional_phone": "+6622620000", "reviews_per_score_1": 1, "reviews_per_score_2": 1, "reviews_per_score_3": 1, "reviews_per_score_4": 5, "reviews_per_score_5": 48, "service_options": [ { "name": "Dine-in", "available": true }, { "name": "Takeout", "available": true }, { "name": "Delivery", "available": false }, { "name": "Outdoor seating", "available": true } ], "accessibility": [ { "name": "Wheelchair accessible entrance", "available": true }, { "name": "Wheelchair accessible seating", "available": true }, { "name": "Wheelchair accessible parking lot", "available": false } ], "highlights": [ { "name": "Great cocktails", "available": true }, { "name": "Live music", "available": true }, { "name": "Solo dining", "available": true } ], "payment_methods": [ { "name": "Credit cards", "available": true }, { "name": "Debit cards", "available": true }, { "name": "NFC mobile payments", "available": true } ], "kgmid": "/g/11js_225mm", "reviews_link": "https://search.google.com/local/reviews?placeid=ChIJ_w9CMVOf4jARCiAw0cFOcUA", "name_for_emails": "The Mesh Bangkok Sukhumvit 22", "is_verified": true, "area_service": false, "street_address": "30 Sukhumvit Alley 22", "county": "New York County", "state_code": "NY", "region": "Bangkok", "timezone": "Asia/Bangkok", "streetview_url": "https://streetviewpixels-pa.googleapis.com/v1/thumbnail?panoid=KVaM9jeAr5qrP89jsABykw&w=211&h=120", "owner_name": "The Mesh Bangkok", "owner_id": "103158630405856889907", "owner_link": "https://www.google.com/maps/contrib/103158630405856889907", "owner_posts": [ { "title": "Graduation Catering Made Easy", "text": "Enjoy your favorite P.F. Chang's dishes...", "type": "offer", "posted_at": "2026-05-19T12:00:07", "expires_at": "2026-06-21T22:00:00", "cta_label": "View Offer", "cta_url": "https://search.google.com/local/posts?...", "image": "https://lh3.googleusercontent.com/geougc/AF1QipNyxlNd...", "promo_code": "GRADUATE26", "id": "3182640778066025502" } ], "customer_posts": [], "image_categories": [ "All", "Latest", "Videos", "Menu", "Food & drink", "Vibe", "By owner", "Street View & 360°" ], "menu_items": [ { "section": "Most Popular", "name": "Mongolian Beef", "description": "Sweet soy glaze, flank steak, garlic, snipped green onion", "price": "$30.29", "image": "https://lh3.googleusercontent.com/p/AF1QipN8CQst1I4fIBZW60C8LiCNsfb5Xsd-0gGFVuXl=s10000" } ], "price_range": "$20–80", "booking_link": "https://reserve.resdiary.com/widget/Standard/TheMesh/9999", "popular_times": "Sunday: 6 AM 0, 7 AM 0, 8 AM 0, 9 AM 0, 10 AM 0, 11 AM 28, 12 PM 35, 1 PM 48, 2 PM 47, 3 PM 50, 4 PM 34, Monday: 10 AM 26, 11 AM 36, 12 PM 45, 1 PM 41", "popular_times_live": "Not too busy", "popular_times_live_percent": 13, "other_hours": [ { "name": "Delivery", "hours": { "Monday": "4:10 AM–4 AM", "Tuesday": "4:10 AM–4 AM" } } ], "actions": [ { "type": "order_online", "label": "Order online", "urls": [ "https://www.google.com/viewer/chooseprovider?..." ] }, { "type": "reserve", "label": "Reserve a table", "urls": [ "https://reserve.resdiary.com/..." ] } ], "order_providers": [ { "name": "Uber Eats", "url": "https://www.ubereats.com/store/the-mesh-bangkok" }, { "name": "Grab", "url": "https://food.grab.com/..." } ], "youtube": "https://www.youtube.com/@mybrand", "reviews_tags": [ { "tag": "mongolian beef", "count": 44 }, { "tag": "crispy honey shrimp", "count": 7 } ], "people_also_search": [ { "name": "Han Dynasty", "categories": [ "Sichuan", "Chinese", "Restaurant" ], "score": 4.3, "reviews": 1537, "lat": 40.732426, "lng": -73.9881724, "url": "https://www.google.com/maps?cid=11645400735119734079" } ], "scraping_time": "2026-02-28T01:19:47+00:00", "functions": null, "native_id": 50231 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/google-maps-leads-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Google Maps Leads Scraper parameters Configure the scraper parameters to control how places are collected. These settings include language, location context, filters, and optional data collection features. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **country** | string | — | Regional context for search results (e.g., `United States`) | | **ratings** | string | Any rating | Minimum rating filter: `Any rating`, `2.5+`, `3.0+`, `3.5+`, `4.0+`, `4.5+` | | **max\_rating** | string | Any rating | Maximum rating filter. Combine with `ratings` to define a score range (e.g. collect only 3–4 star businesses) | | **min\_reviews** | integer | — | Only collect places with at least this many reviews | | **max\_reviews** | integer | — | Only collect places with at most this many reviews | | **exact\_name\_match** | boolean | false | Only collect places whose name matches your search query — useful to target a specific brand or chain | | **phone\_filter** | string | all | Filter by phone presence: `all`, `with_phone`, `without_phone` | | **verified\_filter** | string | all | Filter by owner-claimed status: `all`, `verified_only`, `unverified_only` | | **language** | string | — | Language for place names and metadata (e.g., `English (United States)`) | | **max\_results** | integer | unlimited | Maximum places to collect before task ends | | **geo\_match** | boolean | true | Only return results that geographically match the searched location | | **category\_match** | boolean | true | Only return results that match the searched business category | | **skip\_closed** | boolean | false | Skip permanently closed businesses | | **website\_filter** | string | all | Filter by website presence: `all`, `with_website`, `without_website` | | **skip\_without\_email** | boolean | false | Skip businesses where no email address was found | ## Optional Functions Enable these in the `params.functions` object: | Function | Type | Description | | - | - | - | | **extract\_emails\_from\_website** | boolean | Visit business website to extract email, Facebook, Instagram, and additional phone | | **fetch\_business\_images** | boolean | Collect all image URLs from the Google Place page | | **collect\_business\_details** | boolean | Collect additional metadata like plus\_code, poi, health, and last\_opening\_hours\_updated\_at | Enabling `extract_emails_from_website`, `fetch_business_images`, or `collect_business_details` may incur additional credits. **Backward compatibility:** The old function names `collect_contacts`, `images`, and `details` are still accepted but deprecated. Migrate to the new names listed above. Set `export_unique_results: true` to avoid duplicate entries when places appear multiple times in search results. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Google Maps Search Export", "no_line_breaks": true, "params": { "country": "United States", "ratings": "Any rating", "language": "English (United States)", "functions": { "fetch_business_images": true, "collect_business_details": true, "extract_emails_from_website": true }, "max_results": 200 }, "to_complete": false, "export_unique_results": true }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Google Maps Search Export", "no_line_breaks": True, "params": { "country": "United States", "ratings": "Any rating", "language": "English (United States)", "functions": { "fetch_business_images": True, "collect_business_details": True, "extract_emails_from_website": True }, "max_results": 200 }, "to_complete": False, "export_unique_results": True } ) data = response.json() print(f"Updated: {data['name']}") print(f"Max results: {data['params']['max_results']}") ``` ## Response ```json 201 theme={null} { "name": "Google Maps Search Export", "no_line_breaks": true, "params": { "country": "United States", "ratings": "Any rating", "language": "English (United States)", "functions": { "fetch_business_images": true, "collect_business_details": true, "extract_emails_from_website": true }, "max_results": 200 }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/google-maps-reviews-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Google Maps place URLs to scrape reviews from Add Google Maps place URLs as tasks to your squid. The scraper will extract reviews from each place you provide. You can use either the short CID format or the full Google Maps URL. Crawler ID: `e625ce52e98a6d4d1b53ef36dff7dacb` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Supported URL Formats **Short CID format:** `https://maps.google.com/?cid=1357935577401699828` **Full Google Maps URL:** `https://www.google.com/maps/place/Restaurant+Name/@48.8499542,2.3524796,17z/...` Both formats work - use whichever is easier for your workflow. ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the google-maps-reviews-scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | You can add up to 1000 tasks in a single request for bulk operations. The CID (Customer ID) can be found in the Google Maps URL after `cid=` or extracted from the place's share link. Duplicate URLs are automatically detected and won't be added twice. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "b6ab0f03b02e472a8e2ab0b16b4fdd0f", "tasks": [ {"url": "https://maps.google.com/?cid=1357935577401699828"}, {"url": "https://www.google.com/maps/place/La+Tour+d'\''Argent/@48.8499542,2.3524796,17z"} ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} # Add Google Maps place URLs to scrape reviews response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": "b6ab0f03b02e472a8e2ab0b16b4fdd0f", "tasks": [ {"url": "https://maps.google.com/?cid=1357935577401699828"}, {"url": "https://www.google.com/maps/place/La+Tour+d'Argent/@48.8499542,2.3524796,17z"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "8c15009a391a79151873fe9451285e90", "created_at": "2025-03-17T11:56:51.691986", "is_active": true, "params": { "url": "https://maps.google.com/?cid=1357935577401699828" }, "object": "task" }, { "id": "a6ed45088d82beef3d254679457b5eb6", "created_at": "2025-03-17T11:56:51.692109", "is_active": true, "params": { "url": "https://www.google.com/maps/place/La+Tour+d'Argent/@48.8499542,2.3524796,17z" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/google-maps-reviews-scraper/credit-cost Credit cost for the Google Maps Reviews Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Reviews | 0.2 | 0.2 credit per review | | Get Short Review Link | 1 | 1 credit per review | # Get Results Source: https://docs.lobstr.io/examples/google-maps-reviews-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Google Maps Reviews Scraper Retrieve scraped data from your **Google Maps Reviews Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Google Maps unique numeric business identifier (CID). Example: `6617096495883696522` Internal Google Maps hex identifier for the reviewed business. Example: `0x0:0x5bd4a63441a1398a` Google Places API unique identifier for the reviewed business. Example: `ChIJg4octORx5kcRijmhQTSm1Fs` Name of the business or place being reviewed. Example: `La Rôtisserie d'Argent` Full formatted address of the reviewed business. Example: `19 Quai de la Tournelle, 75005 Paris, France` Unique internal identifier for the Google Maps review. Example: `Ci9DQUlRQUNvZENodHljRjlvT2pnNVJFRnVlR0pFY2s5dFREUjBTa2hrT1hJeGRrRRAB` Display name of the reviewer on Google Maps. Example: `za_zsc` URL to the reviewer's Google Maps profile page. Example: `https://www.google.com/maps/contrib/103634612974133475591?hl=en` Internal Google identifier for the reviewer. Example: `103634612974133475591` Total number of reviews the reviewer has posted on Google Maps. Example: `657` URL of the reviewer's Google Maps profile picture. Example: `https://lh3.googleusercontent.com/a-/ALV-UjVQx5jp1mzVPivrjtNQVobRCTB5v_tmqt0NMCVRZfksPaFeaLf6` Whether the reviewer is a Google Maps Local Guide. Example: `true` Additional metadata associated with the Google Maps review. Example: `{'Food': 5, 'Service': 5, 'Meal type': 'Dinner', 'Atmosphere': 5, 'Noise level': 'Quiet, easy to talk', 'Price per person': '€70–80'}` Star rating given by the reviewer (1 to 5). Example: `5` Whether the review text has been edited after initial publication. Example: `false` Date the review was last modified. Example: `4 months ago` Date and time when the review was last modified in ISO 8601 format. Example: `2025-11-02T06:06:55+00:00` Date and time when the review was first published in ISO 8601 format. Example: `2025-11-02T06:06:55+00:00` Direct URL to the review on Google Maps. Example: `https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2pnNVJFRnVlR0pFY2s5dFREUjBTa2hrT1hJeGRrRRAB!2m1!1s0x0:0x5bd4a63441a1398a!3m1!1s2@1:CAIQACodChtycF9oOjg5REFueGJEck9tTDR0SkhkOXIxdkE%7C%7C?hl=en` Shortened URL link to the review. Example: `https://maps.app.goo.gl/3e7En48M3z1wDMQW8` Full text content of the review. Example: `Its recommended to book in advance to come in this restaurant. The food was unbelievably good! The chicken was amazing. Next time will look to order the duck` Original review text before Google auto-translation. Example: `Its recommended to book in advance to come in this restaurant. The food was unbelievably good! The chicken was amazing. Next time will look to order the duck` Response from the business owner to the review. Example: `Dear Mrs, Dear Sir, We are delighted to hear that you enjoyed your meal with us, especially the chicken, it is always a crowd-pleaser. The duck is another fantastic choice, and we are sure you will love it just as much. Looking forward to welcoming you back soon! Kindest regards, The Tour d'Argent team.` List of photo URLs attached to the review. Example: `https://lh3.googleusercontent.com/geougc-cs/ABOP9puZE5nDT2asJMyqaTPxHdssu43zbZ_VNmkxTL1JA0qycTf-ZTS2EFa3t8xzKr-XwOlVJYky3G5Rk7O-j1ggE8j12fGKCpNwBLnkknKKSh5KukPNCoepFdfhyYy3SaZlVS9dH75rUlGAt5NE, https://lh3.googleusercontent.com/geougc-cs/ABOP9ptbnmUW8D04kRcRbbvHKx0xxb0Dq8sXRWP-9BpVWTIALfm7Zc3I8HPpYwx_wOGzHfEo91USZgMW1mAjfY1lnPMPlVhaNHj75dgVovt_6P1HeUSM6V_D4EjF_LjUMosTQhknmRSJqnzgD4Cc` Time period the reviewer visited the place (e.g. month and year). Example: `2025-11-24T23:00:00+00:00` Number of users who found the review helpful (thumbs up). Example: `0` ISO language code of the review. Example: `en` Average star rating for the reviewed business on Google Maps. Example: `4.5` Total number of reviews for the reviewed business on Google Maps. Example: `0` Country from which the review was posted. Example: `Google` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 55637, "object": "result", "squid": "07ef2fa1fd109d60c540e374b1de8605", "run": "434139cc133dd78f0e51862230b220ce", "cid": "6617096495883696522", "zero_x": "0x0:0x5bd4a63441a1398a", "place_id": "ChIJg4octORx5kcRijmhQTSm1Fs", "place_name": "La Rôtisserie d'Argent", "place_address": "19 Quai de la Tournelle, 75005 Paris, France", "internal_review_id": "Ci9DQUlRQUNvZENodHljRjlvT2pnNVJFRnVlR0pFY2s5dFREUjBTa2hrT1hJeGRrRRAB", "user_name": "za_zsc", "user_link": "https://www.google.com/maps/contrib/103634612974133475591?hl=en", "user_internal_id": 103634612974133475591, "user_reviews_count": 657, "user_image_url": "https://lh3.googleusercontent.com/a-/ALV-UjVQx5jp1mzVPivrjtNQVobRCTB5v_tmqt0NMCVRZfksPaFeaLf6", "is_user_local_guide": true, "review_metadata": { "Food": 5, "Service": 5, "Meal type": "Dinner", "Atmosphere": 5, "Noise level": "Quiet, easy to talk", "Price per person": "€70–80" }, "score": 5, "is_modified": false, "modified_at": "4 months ago", "modified_at_datetime": "2025-11-02T06:06:55+00:00", "published_at_datetime": "2025-11-02T06:06:55+00:00", "review_link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2pnNVJFRnVlR0pFY2s5dFREUjBTa2hrT1hJeGRrRRAB!2m1!1s0x0:0x5bd4a63441a1398a!3m1!1s2@1:CAIQACodChtycF9oOjg5REFueGJEck9tTDR0SkhkOXIxdkE%7C%7C?hl=en", "short_review_link": "https://maps.app.goo.gl/3e7En48M3z1wDMQW8", "text": "Its recommended to book in advance to come in this restaurant. The food was unbelievably good! The chicken was amazing. Next time will look to order the duck", "original_text": "Its recommended to book in advance to come in this restaurant. The food was unbelievably good! The chicken was amazing. Next time will look to order the duck", "response_from_owner": "Dear Mrs, Dear Sir, We are delighted to hear that you enjoyed your meal with us, especially the chicken, it is always a crowd-pleaser. The duck is another fantastic choice, and we are sure you will love it just as much. Looking forward to welcoming you back soon! Kindest regards, The Tour d'Argent team.", "pictures": "https://lh3.googleusercontent.com/geougc-cs/ABOP9puZE5nDT2asJMyqaTPxHdssu43zbZ_VNmkxTL1JA0qycTf-ZTS2EFa3t8xzKr-XwOlVJYky3G5Rk7O-j1ggE8j12fGKCpNwBLnkknKKSh5KukPNCoepFdfhyYy3SaZlVS9dH75rUlGAt5NE, https://lh3.googleusercontent.com/geougc-cs/ABOP9ptbnmUW8D04kRcRbbvHKx0xxb0Dq8sXRWP-9BpVWTIALfm7Zc3I8HPpYwx_wOGzHfEo91USZgMW1mAjfY1lnPMPlVhaNHj75dgVovt_6P1HeUSM6V_D4EjF_LjUMosTQhknmRSJqnzgD4Cc", "visited_in": "2025-11-24T23:00:00+00:00", "total_likes": 0, "lang": "en", "place_average_score": 4.5, "total_reviews": 0, "origin": "Google", "functions": null, "native_id": 55637 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/google-maps-reviews-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Google Maps Reviews Scraper parameters Configure the scraper parameters to control how reviews are collected. These settings determine sorting, filtering, and what data is extracted. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **sort\_by** | string | newest | Sort reviews: `newest`, `most_relevant`, `highest_rating`, or `lowest_rating` | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `modified_at_datetime`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **max\_results** | integer | null | Maximum number of reviews to collect per place | | **max\_unique\_results\_per\_run** | integer | null | Maximum unique results across all tasks in the entire run | | **skip\_reviews\_without\_text** | boolean | false | Skip reviews that have no text content | | **skip\_reviews\_without\_image** | boolean | false | Skip reviews that have no attached pictures | | **rating\_filter** | string | All | Filter reviews by star rating. `All` keeps every review; `Minimum rating` keeps only reviews at or above `min_rating_score`; `Exact rating` keeps only reviews matching `min_rating_score` exactly | | **min\_rating\_score** | integer | null | Minimum star rating to include (1–5). Used when `rating_filter` is `Minimum rating` or `Exact rating` | | **max\_rating\_score** | integer | null | Maximum star rating to include (1–5). Used with `min_rating_score` to define a range | | **language** | string | English (United States) | Language for extracted reviews | | **review\_origin** | string | All sources | Filter reviews by source. `All sources` collects Google reviews and aggregator reviews. Pass a specific aggregator name to filter to that source only | | **functions.get\_short\_review\_link** | boolean | false | Collect shortened review links (1 credit per review) | ## Squid Settings You can also configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Name for your squid configuration | | **concurrency** | integer | Number of parallel scraping workers (1-10) | | **export\_unique\_results** | boolean | Only export unique results (deduplicated) | | **run\_notify** | string | When to send notifications: `on_success`, `on_failure`, `always`, `never` | | **timezone** | string | Timezone for timestamps (e.g., `Europe/Paris`) | Use `sort_by: newest` to monitor recent reviews for reputation management. Set `fetch_since` to limit results to recent reviews only, reducing processing time and costs. Enabling `functions.get_short_review_link` costs 1 credit per review. Only enable if you need shortened URLs. **Backward compatibility:** The old function name `short_link` is still accepted but deprecated. Migrate to `get_short_review_link`. Changes take effect on the next run. Running jobs use the settings from when they started. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/b6ab0f03b02e472a8e2ab0b16b4fdd0f" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Restaurant Reviews Paris", "concurrency": 1, "export_unique_results": true, "run_notify": "on_success", "timezone": "Europe/Paris", "params": { "sort_by": "newest", "fetch_since": null, "max_results": 20, "skip_reviews_without_text": false, "skip_reviews_without_image": false, "rating_filter": "All", "language": "English (United States)", "functions": { "get_short_review_link": false } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "b6ab0f03b02e472a8e2ab0b16b4fdd0f" # Configure scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Restaurant Reviews Paris", "concurrency": 1, "export_unique_results": True, "run_notify": "on_success", "timezone": "Europe/Paris", "params": { "sort_by": "newest", "fetch_since": None, "max_results": 20, "skip_reviews_without_text": False, "skip_reviews_without_image": False, "rating_filter": "All", "language": "English (United States)", "functions": { "get_short_review_link": False } } } ) data = response.json() print(f"Settings updated: {data['name']}") print(f"Sort by: {data['params']['sort_by']}") print(f"Max results: {data['params']['max_results']}") ``` ## Response ```json 201 theme={null} { "name": "Restaurant Reviews Paris", "no_line_breaks": true, "params": { "sort_by": "newest", "fetch_since": null, "max_results": 20, "skip_reviews_without_text": false, "skip_reviews_without_image": false, "rating_filter": "All", "language": "English (United States)", "functions": { "get_short_review_link": false } }, "to_complete": false, "run_notify": "on_success", "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/google-news-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add keyword or topic tasks to scrape Google News articles Add keyword or topic tasks to scrape Google News articles. Each task represents a search query or topic that will fetch matching articles from Google News. Crawler ID: `06faf01896336c01ffb5e96d13dd406c` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the google-news-search-export crawler | | **tasks** | array | Yes | Array of task objects, each containing a `keyword` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **keyword** | string | Yes | A search query (e.g., `climate change`) **or** a predefined Google News topic in CAPS: `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH` | To scrape a specific topic page or section URL from news.google.com, set `topic_url` in the squid settings instead — task keywords are ignored when `topic_url` is set. Configure time range, language, and date filters in the squid settings. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ {"keyword": "crab"}, {"keyword": "climate change"} ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add keyword-based news search tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"keyword": "crab"}, {"keyword": "climate change"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['keyword']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "5f5ccd42b74cf18196dcb7fe14fb8030", "created_at": "2025-07-04T04:51:12.532884", "is_active": true, "params": { "keyword": "crab" }, "module": 131, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/google-news-search-export/credit-cost Credit cost for the Google News Search Export 1 credit per news article. # Get Results Source: https://docs.lobstr.io/examples/google-news-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Google News Search Export Retrieve scraped data from your **Google News Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Headline of the news article. Example: `A robust future? Why Brazil's 'bitter' coffee is thriving as the climate crisis hits global crops` Short summary or excerpt of the article as shown in Google News. Example: `Long seen as the poor relation to arabica, small growers in the Amazon are rebooting robusta's bitter reputation, which can thrive in higher...` Date the article was published. Example: `2026-03-18 13:12:00` Direct URL to the news article. Example: `https://www.theguardian.com/global-development/2026/mar/18/a-robust-future-why-brazils-bitter-coffee-is-thriving-as-the-climate-crisis-hits-global-crops` Name of the news source or publisher. Example: `The Guardian` URL of the article's thumbnail or cover image. Example: `https://i.guim.co.uk/img/media/47c48e5316362bd18c7904f551dd75ebde952c63/0_0_7008_4672/master/7008.jpg?width=465&dpr=1&s=none&crop=none` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 68697, "object": "result", "squid": "4cb2f1c78f37217ff259a9fc178b96d5", "run": "f30902df7baa23de90ad80222a80b115", "title": "A robust future? Why Brazil's 'bitter' coffee is thriving as the climate crisis hits global crops", "short_description": "Long seen as the poor relation to arabica, small growers in the Amazon are rebooting robusta's bitter reputation, which can thrive in higher...", "published_at": "2026-03-18 13:12:00", "url": "https://www.theguardian.com/global-development/2026/mar/18/a-robust-future-why-brazils-bitter-coffee-is-thriving-as-the-climate-crisis-hits-global-crops", "source": "The Guardian", "image": "https://i.guim.co.uk/img/media/47c48e5316362bd18c7904f551dd75ebde952c63/0_0_7008_4672/master/7008.jpg?width=465&dpr=1&s=none&crop=none", "functions": null, "native_id": 68697 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/google-news-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Google News Search Export parameters Configure the scraper parameters to control how Google News articles are collected. These settings include language, recency filters, result limits, and topic-based scraping. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **language** | string | — | Country edition and UI language for Google News (e.g., `English (United States)`) | | **time\_range** | string | — | Filter by recency: `Any time`, `Past hour`, `Past 24h`, `Past week`, `Past year`. The tighter of `time_range` and `fetch_since` wins. | | **max\_results** | integer | 100 | Maximum articles to scrape per task. For keyword tasks requesting more than 100, the scraper walks backwards day by day from today (\~100 articles per day). For topic tasks, limited to what the topic page returns (\~100–200 articles). | | **topic\_url** | string | — | Scrape a Google News topic instead of task keywords. Accepts a predefined topic name (`WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`) or a topic/section URL from news.google.com (`https://news.google.com/topics/{id}` or `.../sections/{sid}`). When set, task keywords are ignored — a single task is enough. | | **fetch\_since** | string | — | Stop collecting articles older than this threshold. Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`). Combines with `time_range` — the tighter constraint wins. | | **fetch\_since\_timezone** | string | — | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values. | Use `topic_url: TECHNOLOGY` to monitor a full Google News topic section without managing individual keyword tasks. Use `fetch_since: 7d` combined with `time_range: Past week` to ensure you only collect recent articles. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Google News Search Export", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "language": "English (United States)", "time_range": "Past week", "max_results": 100, "fetch_since": "7d" } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Google News Search Export", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "language": "English (United States)", "time_range": "Past week", "max_results": 100, "fetch_since": "7d" } } ) data = response.json() print(f"Updated: {data['name']}") print(f"Time range: {data['params']['time_range']}") print(f"Max results: {data['params']['max_results']}") ``` ## Response ```json 201 theme={null} { "name": "Google News Search Export", "no_line_breaks": true, "params": { "language": "English (United States)", "time_range": "Past week", "max_results": 100, "fetch_since": "7d" }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/google-play-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Google Play Store Scraper squid Add URLs, package ids or keywords to your **Google Play Store Scraper** squid. Crawler ID: `92c970c6f2a2b2018f4a291aeed1e3d5` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Paste a Google Play app link, a Play Store search link, an app's package ID such as `com.whatsapp`, or just type a keyword. A keyword or a Play Store search link returns the first 30 apps Google Play shows for it. Example: `https://play.google.com/store/apps/details?id=com.whatsapp` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://play.google.com/store/apps/details?id=com.whatsapp"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://play.google.com/store/apps/details?id=com.whatsapp"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://play.google.com/store/apps/details?id=com.whatsapp"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/google-play-scraper/credit-cost Credit cost for the Google Play Store Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Google Play Results | 1 | 1 credit per row. App rows and review rows cost the same. | Turn off `collect_reviews` to collect app listings only (one row per app). With `collect_reviews` on (the default), a popular app can add thousands of review rows. # Get Results Source: https://docs.lobstr.io/examples/google-play-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Google Play Store Scraper Retrieve scraped data from your **Google Play Store Scraper** runs. Two row types share the same table: `record_type = "app"` for app listings, `record_type = "review"` for their reviews. Fields marked "App rows only" or "Review rows only" are left empty on the other type. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Common Type of row: `app` for an app listing, `review` for one of its reviews. Identifier of the row: the package id on an app row, the review id on a review row. The task input that produced this row (app URL, package id, search URL or keyword). Android package id of the app this row belongs to. Example: `com.whatsapp` Google Play URL of the app this row belongs to. Title of the app this row belongs to, filled on review rows as well. Example: `WhatsApp Messenger` ### App rows Title of the app. App rows only. Name of the developer publishing the app. Google Play developer id, usable as `https://play.google.com/store/apps/dev?id=`. Developer website declared on the listing. Support email declared by the developer. Postal address declared by the developer. Primary Google Play category of the app. Example: `Communication` Google Play identifier of the primary category. Example: `COMMUNICATION` Price of the app in the selected storefront, 0 when the app is free. Currency the price is expressed in. True when the app costs nothing to install. Price range of the in-app purchases the app offers, empty when it offers none. Example: `$0.99 - $49.99 per item` Install count as displayed on the listing. Example: `10,000,000,000+` Lower bound of the displayed install count, as a number. Precise install count Google Play carries in the page payload. Average rating of the app, empty when the app has no rating yet. Number of star ratings the app received. Number of written reviews the app received, always smaller than `ratings_count`. Number of ratings per star level, from 1 to 5. Full store description of the app, as plain text. Short tagline shown under the app title. Current version of the app. Google Play leaves it empty for apps that publish device-specific builds; the version of the most recent review is used when available. Minimum Android version the app requires (`8.0`, `7.0`, `6.0`...). Empty for apps that ship device-specific builds. Date the app was last updated on Google Play (UTC). Date the app was first released on Google Play (UTC). Content rating of the app, e.g. `Everyone`, `Teen`, `Mature 17+`. Reason given for the content rating, e.g. `Users Interact`. Screenshot URLs published on the listing, in display order. App icon URL. Feature graphic shown at the top of the listing. Privacy policy URL declared by the developer. Promo video published on the listing, empty when the app has none. Thumbnail of the promo video. True when Google Play shows the "Contains ads" badge on the listing. Changelog of the latest update, as plain text. Chart position of the app on Google Play when it is ranked. Example: `#1 top free communication` ### Review rows Google Play identifier of the review. Direct link to the review on the app listing. Display name of the reviewer. Google identifier of the reviewer. Profile picture of the reviewer. Star rating given by the reviewer, 1 to 5. Body of the review. Number of users who marked the review as helpful. Date the review was posted (UTC). Version of the app the reviewer had installed. Reply the developer posted to the review, empty when there is none. Date the developer replied (UTC). Sub-ratings the reviewer gave on the app's own criteria, mostly on games. Empty on most reviews. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"record_type": "review", "record_id": "d40bb75a-d1a5-44b3-863d-c8624445efe9", "source_url": "https://play.google.com/store/apps/details?id=com.whatsapp", "package_id": "com.whatsapp", "app_title": "WhatsApp Messenger", "author": "Jonathan Spencer", "rating": 1, "text": "The most useless app I've encountered since the last update.", "thumbs_up": 5, "review_date": "2026-08-28 20:40:15", "app_version": "2.26.33.74"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/google-play-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Google Play Store Scraper settings Configure your **Google Play Store Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | country | string | `us` | The Play Store country to read from. Changes price, currency and availability on app rows, and which reviews Google Play serves. Use `language` to pick the review language. | | language | string | `en` | The language of the reviews you get, and of the app description. | | sort | string | `helpfulness` | Order the reviews are collected in. One of: `helpfulness`, `newest`, `rating`. `helpfulness` is Google Play's Most Relevant ranking. Only applies when Collect Reviews is on; ignored while Newer than is set (which always collects newest first). | | rating\_filter | string | `all` | Only collect reviews with this star rating. One of: `all`, `1`, `2`, `3`, `4`, `5`. Google Play applies the filter itself, so filtered-out reviews are never fetched. Only applies when Collect Reviews is on. | | collect\_reviews | boolean | true | Collect each app's reviews as well as its listing, one row per review. A review row costs one credit, the same as an app row. Turn this off to collect app listings only. | | fetch\_since | string | — | Only collect reviews posted after this point. Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`). Google Play publishes reviews about a day late, so a window shorter than a day usually returns none. App rows are always included. Only applies when Collect Reviews is on. | | fetch\_since\_timezone | string | — | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values. | | max\_results | integer | — | Maximum number of rows collected per input, app rows and review rows counted together. Leave empty to collect everything available. | | max\_unique\_results\_per\_run | integer | — | Maximum number of unique rows retrieved across all inputs in the entire run. Leave empty for unlimited. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "country": "us", "language": "en", "sort": "newest", "rating_filter": "1", "collect_reviews": true, "fetch_since": "7d", "max_results": 500 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "country": "us", "language": "en", "sort": "newest", "rating_filter": "1", "collect_reviews": True, "fetch_since": "7d", "max_results": 500, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"country": "us", "language": "en", "sort": "newest", "rating_filter": "1", "collect_reviews": true, "fetch_since": "7d", "max_results": 500}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/google-search-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add keyword-based search tasks to scrape Google Search results Add keyword-based tasks to scrape Google Search results. Each task represents a search query that will be executed on Google. Crawler ID: `f588385d11c48f8af51560e561077238` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the google-search-scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `keyword` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **keyword** | string | Yes | The search query to execute on Google | You can add multiple keywords in a single request for bulk searches. Configure search parameters like country, language, and max\_pages in the squid settings. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ {"keyword": "crab"}, {"keyword": "lobster recipes"} ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add keyword-based tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"keyword": "crab"}, {"keyword": "lobster recipes"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['keyword']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "36a5f24a550f89c2b997107ca043ec8a", "created_at": "2025-06-30T08:25:29.311114", "is_active": true, "params": { "keyword": "crab" }, "module": 128, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/google-search-scraper/credit-cost Credit cost for the Google Search Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Results | 1 | 1 credit per organic result row. | | Collect Shopping Results | 1 | 1 extra credit per shopping result (first page, up to 40 products) when `collect_shopping_results` is enabled. Off by default. | # Get Geolocation Source: https://docs.lobstr.io/examples/google-search-scraper/get-geolocation GET https://api.lobstr.io/v1/googlelocations Fetch valid location values for geographic search bias Use this endpoint to fetch valid location values for the `params.location` setting in the Google Search Scraper. These values provide geographic bias for your search queries. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Search substring for location names. Example: `Alabama` Full country name. Example: `United States` ## Query Parameters | Parameter | Required | Description | | - | - | - | | **q** | Yes | Substring to search for in region, district, or city names | | **country\_name** | Yes | Full country name to scope the search (e.g., `United States`) | ## Response Fields | Field | Type | Description | | - | - | - | | **name** | string | Display name of the location (region, district, or city) | | **canonical\_name** | string | Full hierarchical name (e.g., `Alabama,United States`) | | **country\_name** | string | Country associated with this location | | **country\_code** | string | ISO 2-letter country code (e.g., `US`) | Use the returned `name` value as your `params.location` setting. Location values provide geographic bias - search results will be relevant to that area. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/googlelocations?q=Alabama&country_name=United%20States" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} # Search for locations containing "Alabama" in United States response = requests.get(f"{BASE_URL}/googlelocations", headers=headers, params={ "q": "Alabama", "country_name": "United States" } ) data = response.json() print(f"Found {len(data['data'])} locations") for location in data["data"][:5]: print(f" {location['name']} ({location['country_code']})") ``` ## Response ```json 200 theme={null} { "success": true, "data": [ { "name": "Alabama", "canonical_name": "Alabama,United States", "country_name": "United States", "country_code": "US" }, { "name": "Alabama's 1st Congressional District 2022 redistricting", "canonical_name": "Alabama's 1st Congressional District 2022 redistricting,Alabama,United States", "country_name": "United States", "country_code": "US" }, { "name": "The University of Alabama", "canonical_name": "The University of Alabama,Alabama,United States", "country_name": "United States", "country_code": "US" }, { "name": "University of Alabama at Birmingham", "canonical_name": "University of Alabama at Birmingham,Alabama,United States", "country_name": "United States", "country_code": "US" } ] } ``` # Get Results Source: https://docs.lobstr.io/examples/google-search-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Google Search Scraper Retrieve scraped data from your **Google Search Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Title of the search result page. Example: `Coffee` URL of the search result. Example: `https://en.wikipedia.org/wiki/Coffee` URL as displayed in the Google search result (may differ from actual URL). Example: `https://en.wikipedia.org › wiki › Coffee` Meta description or snippet shown in the Google search result. Example: `Coffee is a beverage brewed from roasted, ground coffee beans. Darkly colored, bitter, and slightly acidic, coffee has a stimulating effect on humans, primarily ...` Individual text segments of the Google search snippet Question text from a People Also Ask entry. Example: `What is the 15-15-15 coffee rule?` Answer text from a People Also Ask entry Whether this result is a People Also Ask (Q\&A) entry. Example: `false` Whether this result is a related search query suggestion. Example: `false` Whether this is an unpaid organic search result. Example: `true` Whether this is a paid advertisement in Google search results. Example: `false` Total number of search results Google reports for the query. Example: `3190000000` Publication or indexing date shown in the Google search result Keywords Google highlights in the search snippet. Example: `coffee` Search results page number (1 = first page of results). Example: `1` ### Collect Shopping Results `true` on a shopping row, `false` on an organic row. Only populated when `collect_shopping_results` is on. Shopping seller / merchant name. Only populated on shopping rows. Example: `Amazon.com` Shopping price as shown by Google (with currency symbol). Only populated on shopping rows. Example: `$29.99` Shopping price as a number. Only populated on shopping rows. Example: `29.99` Shopping price currency code. Only populated on shopping rows. Example: `USD` Shopping product rating out of 5. Only populated on shopping rows when Google shows one. Example: `4.5` Shopping product rating count. Only populated on shopping rows when Google shows one. Example: `2314` Shopping product image URL. Only populated on shopping rows. Google's own identifier for the shopping product. Only populated on shopping rows. ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 77331, "object": "result", "squid": "f6bcb5d88a53ddd90e0ea0944f0433ae", "run": "bbdefdfc8d2f9c05bcbdd805c24c6cf6", "title": "Coffee", "url": "https://en.wikipedia.org/wiki/Coffee", "displayed_url": "https://en.wikipedia.org › wiki › Coffee", "description": "Coffee is a beverage brewed from roasted, ground coffee beans. Darkly colored, bitter, and slightly acidic, coffee has a stimulating effect on humans, primarily ...", "snippet_segments": null, "question": "What is the 15-15-15 coffee rule?", "answer": null, "is_question_answer": false, "is_related_query": false, "is_organic": true, "is_paid": false, "total_results": "3190000000", "date": null, "emphasized_keywords": "coffee", "page": 1, "functions": null, "native_id": 77331 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/google-search-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Google Search Scraper parameters Configure the scraper parameters to control how Google Search results are collected. These settings include pagination, location and language. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Description | | - | - | - | | **max\_pages** | integer | Maximum search result pages to crawl per keyword. Google limits to \~300-400 total results. The scraper always requests 10 results per page and paginates. | | **max\_unique\_results\_per\_run** | integer | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | | **country** | string | Sets IP origin country and Google domain (e.g., `google.fr` for France). Default: `United States` | | **location** | string | Geographic bias for results (state, city). Use Get Geolocation to find valid values. | | **language** | string | Language for search results. Defaults to English for the chosen country. | | **collect\_shopping\_results** | boolean | Also collect the Google Shopping results for each keyword (first page, up to 40 products): seller, price, rating, reviews and image. Uses the same country, language and location as the search. Billed at 1 credit per shopping result. Default: `false` | Use the Get Geolocation endpoint to discover valid `location` values. Higher `max_pages` values will collect more results but use more credits. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Google Search Scraper", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "country": "United States", "language": "English", "max_pages": 4, "max_unique_results_per_run": 500, "location": "Alabama", "collect_shopping_results": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Google Search Scraper", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "country": "United States", "language": "English", "max_pages": 4, "max_unique_results_per_run": 500, "location": "Alabama", "collect_shopping_results": False } } ) data = response.json() print(f"Updated: {data['name']}") print(f"Max pages: {data['params']['max_pages']}") print(f"Location: {data['params']['location']}") ``` ## Response ```json 201 theme={null} { "name": "Google Search Scraper", "no_line_breaks": true, "params": { "country": "United States", "language": "English", "max_pages": 4, "max_unique_results_per_run": 500, "location": "Alabama", "collect_shopping_results": false }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/idealista-listings-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add Idealista search URLs as tasks for scraping property listings Add Idealista search URLs to your squid for scraping Spanish property listings. The scraper extracts real estate listings including price, area, bedrooms, contact information, and listing details from Idealista.com search results. Crawler ID: `5f4b269e29e601e09fa50f4155b3970e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Task Format Each task should contain a URL from an Idealista search results page. You can search for properties by location, type, and other filters on Idealista, then use those search URLs as tasks. ## Supported URL Formats The scraper supports Idealista search URLs from various property categories: Apply filters on Idealista (price range, property type, number of bedrooms) before copying the URL to get more targeted results. Idealista uses different language subdomains. The scraper works with /en/ (English), /es/ (Spanish), and other language versions. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.idealista.com/en/venta-viviendas/vizcaya/" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Idealista search URLs as tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.idealista.com/en/venta-viviendas/vizcaya/"}, {"url": "https://www.idealista.com/en/venta-viviendas/madrid/"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") for task in data["tasks"]: print(f" Task ID: {task['id']}") print(f" URL: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.idealista.com/en/venta-viviendas/vizcaya/" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/idealista-listings-search-export/credit-cost Credit cost for the Idealista Listings Search Export 0.1 credit per listing. # Get Results Source: https://docs.lobstr.io/examples/idealista-listings-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Idealista Listings Search Export Retrieve scraped data from your **Idealista Listings Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the listing on Idealista. Example: `https://www.idealista.com/en/inmueble/106993032/` Title of the property listing on Idealista. Example: `Flat / apartment for sale in Galleteras Nn, La Ribera-Ibarrekolanda, Bilbao` Listed price of the property. Example: `526000` ISO 3-letter currency code of the listed price. Example: `EUR` Number of bedrooms in the property. Example: `2` Living surface area of the property in square metres. Example: `99` Floor level where the property is located. Example: `1st floor exterior with lift` Full description text provided by the seller or agency on Idealista. Example: `A little piece of nature in the heart of Bilbao. Ubide Barri is the new development by Loiola, located in the most sought-after enclave of Zorrotzaurre Island: on the first line of the Deusto estuary, surrounded by parks and with the best connections to the city.` Contact phone number for the listing. Example: `+34843750610` URL of the property's main listing image on Idealista. Example: `https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/00/63/2d/1326662095.jpg` Whether the listing includes a garage or parking space. Example: `true` Whether the garage or parking space is included in the listed price. Example: `true` Extra price of the parking space when not included in the listed price. `null` if included or not applicable. Example: `15000` ### Detail Fields The following fields are populated only when `get_property_details: true` is set. They require an additional page visit per listing. Year of construction of the property. Example: `1985` Orientation of the property (e.g. north, south, east, west or combinations). Example: `south, east` Heating type and energy source as displayed on the listing. Example: `individual gas` Interior condition of the property (e.g. second hand/good condition, to renovate). Example: `second hand/good condition` Energy certificate consumption rating letter (A–G). Example: `C` Energy consumption in kWh/m² per year from the energy performance certificate. Example: `142.5` Energy certificate emissions rating letter (A–G). Example: `D` CO₂ emissions in kg CO₂/m² per year from the energy performance certificate. Example: `28.3` Monthly community / homeowner association costs in the listing currency. Example: `85.0` Constructed area in square metres. Example: `115` Usable interior area in square metres. Example: `99.0` Plot or land size in square metres (houses). Example: `300` Furnishing status of the property (rental listings). Example: `furnished` Whether the property has fitted wardrobes. Example: `true` House sub-type for chalets (e.g. independantHouse, semidetachedHouse, terracedHouse). Example: `independantHouse` Whether the property is a duplex. Example: `false` Whether the property is on the top floor. Example: `false` Whether the property is sold at auction. Example: `false` Whether the advertiser is a bank (bank-owned property). Example: `false` Number of floors of the building or house. Example: `6` Full raw characteristics of the listing grouped by section, as returned by Idealista's detail page. Example: `{"Basics": {"Bedrooms": "2", "Floor": "3rd"}, ...}` Last modification date of the listing as returned by the detail page (UTC). Example: `2026-08-20T12:00:00Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 38127, "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "url": "https://www.idealista.com/en/inmueble/106993032/", "title": "Flat / apartment for sale in Galleteras Nn, La Ribera-Ibarrekolanda, Bilbao", "price": 526000, "currency": "EUR", "bedrooms": 2, "area": 99, "floor": "1st floor exterior with lift", "description": "A little piece of nature in the heart of Bilbao. Ubide Barri is the new development by Loiola, located in the most sought-after enclave of Zorrotzaurre Island: on the first line of the Deusto estuary, surrounded by parks and with the best connections to the city.", "phone": "+34843750610", "main_image": "https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/00/63/2d/1326662095.jpg", "scraping_time": "2026-03-20T09:15:00.000Z", "functions": null, "native_id": 38127 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/idealista-listings-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Idealista Listings Scraper parameters and options Configure your Idealista Listings Scraper squid settings to control pagination and scraping behavior. Adjust the maximum pages to scrape based on your needs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Squid Parameters The following parameters can be configured in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 60 | Maximum number of search result pages to scrape (max: 100) | | **get\_property\_details** | boolean | false | Visit each listing page to collect full property characteristics (year built, orientation, energy certificate, community costs, etc.). Increases credit usage. | ## General Settings Standard squid settings that apply to all scrapers: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Idealista typically shows 30 listings per page. Setting max\_pages to 60 can yield up to 1,800 listings per search URL. Keep concurrency at 1 for Idealista to avoid rate limiting issues. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Idealista Iter Listings (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 60, "get_property_details": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Configure scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Idealista Iter Listings (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 60, "get_property_details": False } } ) data = response.json() print(f"Squid updated: {data['name']}") print(f"Max pages: {data['params']['max_pages']}") ``` ## Response ```json 201 theme={null} { "name": "Idealista Iter Listings (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 60, "get_property_details": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/immoweb-listings-phone-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Immoweb Listings & Phones Search Export squid Add URLs or inputs to your **Immoweb Listings & Phones Search Export** squid. Each task object must include the required fields below. Crawler ID: `9bca6a0a4cc5237b37798f8640dce087` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/immoweb-listings-phone-search-export/credit-cost Credit cost for the Immoweb Listings & Phones Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 1 | 1 credit per listing. | | Get Listing Details | 4 | 4 credits per listing. | # Get Results Source: https://docs.lobstr.io/examples/immoweb-listings-phone-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Immoweb Listings & Phones Search Export Retrieve scraped data from your **Immoweb Listings & Phones Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the listing on Immoweb. Example: `10181065` Direct URL to the listing on Immoweb. Example: `https://www.immoweb.be/fr/annonce/10181065` Property type (e.g. APARTMENT, HOUSE). Example: `APARTMENT` Title of the listing. Example: `Appartement 2 chambres` Number of bedrooms. Example: `2` Locality/city of the property. Example: `Evere` Postal code of the property location. Example: `1140` Street name of the property. Example: `Rue Edouard Dekoster` Street number of the property. Example: `64` Box/unit number. Example: `40` Floor level of the property. Example: `1` Latitude coordinate of the property. Example: `50.8782927` Longitude coordinate of the property. Example: `4.4040975` Habitable surface area in square meters. Example: `70` Land surface area in square meters. Example: `0` Type of price (e.g. residential\_sale, residential\_rent). Example: `residential_sale` Listed price of the property. Example: `200000` Number of bathrooms. Example: `1` Date the listing was created on Immoweb. Example: `2022-10-19` Date the listing expires on Immoweb. Example: `2023-02-27` Date the listing was last modified. Example: `2022-10-19` Type of agency (e.g. AGENCY, OWNER). Example: `AGENCY` Email address of the agency. Example: `contact@agency.be` Phone number of the agency. Example: `+32 2 123 45 67` Mobile phone number of the agency. Example: `+32 478 15 73 6` Name of the agency. Example: `OM-IMMO SPRL` Full property description text. Example: `Magnifique appartement lumineux...` URL of the main listing picture. Example: `https://media-resize.immowebstatic.be/classifieds/.../736x736/image.jpg` Comma-separated list of all picture URLs. Example: `https://media-resize.immowebstatic.be/classifieds/.../736x736/img1.jpg, https://...` Transaction type (FOR\_SALE, FOR\_RENT). Example: `FOR_SALE` Country of the property. Example: `Belgique` Region of the property. Example: `Bruxelles` Province of the property. Example: `Bruxelles` Building condition (AS\_NEW, GOOD, TO\_RENOVATE, etc.). Example: `AS_NEW` Number of facades. Example: `2` Number of floors in the building. Example: `6` Year the building was constructed. Example: `1950` Whether the building has an elevator. Example: `true` Whether the property has a terrace. Example: `true` Terrace surface area in square meters. Example: `15` Whether the property has a garden. Example: `false` Garden surface area in square meters. Example: `100` Energy Performance Certificate score. Example: `C` Heating type (GAS, ELECTRIC, OIL, etc.). Example: `GAS` Whether the property is furnished. Example: `false` External reference number from the agency. Example: `REF-12345` Property subtype (e.g. STUDIO, DUPLEX, PENTHOUSE). Example: `APARTMENT` Total number of rooms. Example: `4` Sale availability status (e.g. AVAILABLE, SOLD\_OUT). Example: `AVAILABLE` Price per square meter. Example: `2857.14` Previous listed price, if reduced. Example: `220000` Total number of listing photos. Example: `12` Sub-unit breakdown for new-build projects. Each entry describes one apartment unit within the project. `null` for individual listings. Name of the new-build project, if applicable. Example: `Résidence Les Érables` Percentage of units already sold in a new-build project. Example: `65.0` CO₂ emission rating in kg CO₂/sqm/year. Example: `18.5` Primary energy consumption in kWh/sqm/year. Example: `142.0` Whether the property has a heat pump. Example: `false` Whether the property has solar (PV) panels. Example: `false` Whether the property has double-glazed windows. Example: `true` Whether an asbestos certificate is present. Example: `false` Whether the electrical installation has a compliance certificate. Example: `true` Whether a valid flood-risk certificate is present. Example: `true` Status of the oil-tank certificate, if applicable. Example: `COMPLIANT` Kitchen type (e.g. INSTALLED, SEMI\_EQUIPPED, NOT\_INSTALLED). Example: `INSTALLED` Number of separate toilets. Example: `1` Number of shower rooms (separate from bathrooms). Example: `0` Number of indoor parking spaces included. Example: `1` Number of outdoor parking spaces included. Example: `0` Monthly co-ownership charges in the listing currency. Example: `150` List of amenity strings reported on the listing. Example: `["BARBECUE", "BIKE_STORAGE"]` Whether the property has a swimming pool. Example: `false` Whether the property has air conditioning. Example: `false` Whether the property has disabled-access provisions. Example: `false` Whether internet access is included. Example: `false` Whether the property has an alarm system. Example: `false` Number of times the listing has been viewed on Immoweb. Example: `847` Number of times the listing has been saved/bookmarked. Example: `23` Website URL of the agency. Example: `https://www.agencyname.be` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 34737, "object": "result", "squid": "87559da1c8f64d80b00b6e86ff597b60", "run": "fad94d6642ac9f41ea9c6762e5d77a6d", "internal_id": 10181065, "url": "https://www.immoweb.be/fr/annonce/10181065", "type": "APARTMENT", "title": "Appartement 2 chambres", "bedroom_count": 2, "locality": "Evere", "postal_code": 1140, "street": "Rue Edouard Dekoster", "number": "64", "box": "40", "floor": 1, "lat": 50.8782927, "lng": 4.4040975, "habitable_surface": 70, "land_surface": 0, "price_type": "residential_sale", "price": 200000, "bathroom_count": 1, "creation_date": "2022-10-19", "expiration_date": "2023-02-27", "last_modification_date": "2022-10-19", "agency_type": "AGENCY", "agency_email": "contact@agency.be", "agency_phone": "+32 2 123 45 67", "agency_mobile": "+32 478 15 73 6", "agency_name": "OM-IMMO SPRL", "description": "Magnifique appartement lumineux...", "picture": "https://media-resize.immowebstatic.be/classifieds/.../736x736/image.jpg", "pictures": "https://media-resize.immowebstatic.be/classifieds/.../736x736/img1.jpg, https://...", "transaction_type": "FOR_SALE", "country": "Belgique", "region": "Bruxelles", "province": "Bruxelles", "building_condition": "AS_NEW", "facade_count": 2, "floor_count": 6, "construction_year": 1950, "has_lift": true, "has_terrace": true, "terrace_surface": 15, "has_garden": false, "garden_surface": 100, "epc_score": "C", "heating_type": "GAS", "is_furnished": false, "external_reference": "REF-12345", "subtype": "APARTMENT", "room_count": 4, "sale_status": "available", "price_per_sqm": 3200, "old_price": 210000, "picture_count": 13, "units": [ { "id": 21781288, "price": 299000, "surface": 72, "bedroom_count": 1, "floor": 2, "sale_status": "AVAILABLE" } ], "project_name": "ALBA", "project_sold_percentage": 40, "carbon_emission": 56, "primary_energy_consumption": 20634, "has_heat_pump": false, "has_photovoltaic_panels": true, "has_double_glazing": true, "has_asbestos_certificate": false, "has_electrical_compliance": true, "has_valid_flood_certificate": true, "oil_tank_certificate_status": "GREEN", "kitchen_type": "SEMI_EQUIPPED", "toilet_count": 1, "shower_room_count": 1, "parking_count_indoor": 1, "parking_count_outdoor": 0, "monthly_costs": 75, "amenities": { "lift": true, "terrace": true, "swimming_pool": false }, "has_swimming_pool": false, "has_air_conditioning": false, "has_disabled_access": false, "has_internet": true, "has_alarm": false, "view_count": 128, "bookmark_count": 4, "agency_website": "http://www.agency.be", "functions": null, "native_id": 34737 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/immoweb-listings-phone-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Immoweb Listings & Phone Search Export scraper settings Configure your Immoweb Listings & Phone Search Export squid settings. Control pagination, result limits, and whether to fetch full listing details including phone numbers. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | unlimited | Maximum number of search result pages to scrape | | **max\_results** | integer | unlimited | Maximum number of listings to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Optional Functions Enable these in the `params.functions` object: | Function | Type | Default | Description | | - | - | - | - | | **get\_listing\_details** | boolean | true | Visit each listing's detail page to fetch full description, phone number, and additional attributes (4 credits per listing) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | `get_listing_details` is enabled by default and costs 4 additional credits per listing. Disable it if you only need listing summaries. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Immoweb Listings & Phone (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 10, "max_results": 200, "functions": { "get_listing_details": true } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Immoweb Listings & Phone (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 10, "max_results": 200, "functions": { "get_listing_details": True # 4 credits per listing } } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Immoweb Listings & Phone (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 10, "max_results": 200, "functions": { "get_listing_details": true } } } ``` # Examples Source: https://docs.lobstr.io/examples/index Ready-to-use code examples for every scraper on lobstr.io Browse all available scrapers by platform below. ## Amazon Export reviews for any Amazon product ## AutoScout24 Export car listings from AutoScout24 ## Bien'Ici Scrape property listings from Bien'Ici ## Capterra Export every review of a Capterra product — pros/cons, ratings, reviewer profile, vendor replies ## Contact Extract emails, phones, and social profiles from any website ## Crunchbase Export company profiles from Crunchbase — description, funding, industries, contacts, no account needed ## Facebook Export ads from the Meta Ad Library by keyword or advertiser Search and export Facebook pages by keyword Extract business info from Facebook business pages Scrape comments from any Facebook post, photo, video or reel Export posts from Facebook groups Scrape posts from private Facebook groups you have access to Scrape Facebook Marketplace listings by search URL ## Glassdoor Export job listings from Glassdoor with salary estimates and company ratings ## Google Scrape reviews for any Google Maps listing Extract business leads from Google Maps search results Collect organic search results for any query Export news articles from Google News search Export any Play Store app listing and its reviews from an app URL, package id or keyword ## Idealista Scrape property listings from Idealista ## Immoweb Export listings with phone numbers from Immoweb ## Instagram Scrape public Instagram profile data Export posts from any Instagram account Collect reels data from Instagram accounts Collect comments from any public Instagram post or reel, no account needed Export every follower of a public Instagram account Collect posts and reels from Instagram hashtags and keyword searches ## LaCentrale Scrape car listings from LaCentrale Check if LaCentrale listings are still active or deactivated ## Leboncoin Scrape store directories from Leboncoin Boutiques Export listings from Leboncoin search results Scrape a single Leboncoin listing page Export Leboncoin listings including phone numbers Check if Leboncoin listings are still active Automatically send messages to Leboncoin sellers Read the replies in your Leboncoin inbox, one row per message, joinable to Auto Message Sender by annonce\_id ## LinkedIn Scrape company pages from LinkedIn without a LinkedIn account Export employees from any LinkedIn company page Export job postings with full description, salary, recruiter and company details Scrape LinkedIn profiles and find emails without a LinkedIn account Scrape public LinkedIn profile data Export leads from LinkedIn search results Scrape posts from any LinkedIn profile or company page Get everyone who engaged with a LinkedIn post Export LinkedIn people, company and post search results from a search URL, using your synced LinkedIn account ## Pinterest Export pins from a Pinterest keyword, search URL, board, profile or single pin, no account needed ## ParuVendu Scrape car and real estate listings from ParuVendu ## Naukri Export job listings from Naukri, India's largest job portal ## Pages Jaunes Export company listings from Pages Jaunes ## PAP Export apartment listings from PAP ## Quora Scrape answers, posts, profiles, and topics from Quora ## Sales Navigator Export leads from LinkedIn Sales Navigator Scrape company data from Sales Navigator Extract profile data from Sales Navigator ## Realtor Export property listings from Realtor.com search results ## Reddit Scrape posts, comments, user profiles, and subreddits from Reddit ## SeLoger Export property listings from SeLoger ## Similarweb Export the full Similarweb profile of any domain or ranking — traffic, ranks, keywords, competitors, AI referral traffic ## Threads Scrape posts, profiles, and keyword searches from Threads ## TikTok Export video details, stats, and author info for any TikTok video Export all videos and profile data from any TikTok account Export top-performing ads from TikTok's ad library Scrape comments from any TikTok video Export every video published under a TikTok hashtag ## TripAdvisor Export restaurant listings from TripAdvisor One row per restaurant with city ranking, Travelers' Choice and MICHELIN awards, sub-ratings and contacts Scrape reviews from any TripAdvisor listing ## Trustpilot Scrape reviews from any Trustpilot company page ## Upwork Export job listings from Upwork search results ## Twitter Scrape public profile data from Twitter/X users Export tweets matching any search query Collect all tweets from a specific user Export followers or following lists for any account ## Vinted Scrape product listings from Vinted ## Yellow Pages Export business listings from Yellow Pages search results ## Yelp Export business listings from Yelp search Export all reviews from any Yelp business page ## YouTube Extract contact emails from YouTube channel pages Scrape comments and replies from any YouTube video Search YouTube, or export a video, channel, playlist or hashtag Download captions and transcripts from any YouTube video, playlist, or channel ## Zillow Export property listings from Zillow search results # Add Tasks Source: https://docs.lobstr.io/examples/instagram-comments-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Instagram Comments Scraper squid Add URLs or inputs to your **Instagram Comments Scraper** squid. Crawler ID: `a442c64e1d6b3e3503f81dd5e26c3f01` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Instagram Post or Reel URL to collect comments from. Example: `https://www.instagram.com/p/DDIJAfeyemG/` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.instagram.com/p/DDIJAfeyemG/"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.instagram.com/p/DDIJAfeyemG/"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.instagram.com/p/DDIJAfeyemG/"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/instagram-comments-scraper/credit-cost Credit cost for the Instagram Comments Scraper 1 credit per comment. Replies collected with `include_child_comments` are charged the same as top-level comments. # Get Results Source: https://docs.lobstr.io/examples/instagram-comments-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Instagram Comments Scraper Retrieve scraped data from your **Instagram Comments Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields Unique identifier for the Instagram comment. Example: `18397500988178795` Direct URL to the comment on Instagram. Example: `https://www.instagram.com/p/DDIJAfeyemG/c/18397500988178795` URL of the Instagram post this comment belongs to. Example: `https://www.instagram.com/reel/DDIJAfeyemG` Full text content of the comment. Example: `I LOVE INSTAGRAM #instagram` Details of a Giphy GIF or sticker attached to the comment. Instagram username of the comment author. Example: `mohsinjamindar07` Unique Instagram identifier of the comment author. Example: `40564582835` URL of the comment author's Instagram profile picture. Example: `https://scontent.cdninstagram.com/v/t51.2885-19/x.jpg` Whether the comment author has a verified badge on Instagram. Example: `False` Timestamp of when the comment was posted. Example: `2026-02-15T06:27:58.000Z` Number of likes the comment received. Example: `0` Number of replies to this comment. Example: `0` URL of the comment author's Instagram profile. Example: `https://instagram.com/sai_jonov` Whether this is a reply to another comment (nested comment). Example: `False` Unique identifier of the parent comment this is a reply to. Username of the account that posted the post or reel. Example: `cristiano` Instagram id of the account that posted the post or reel. Example: `173560420` Display name of the account that posted the post or reel. Example: `Cristiano Ronaldo` Whether the account that posted has a verified badge. Example: `True` Whether the comment was edited after posting. Example: `False` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"comment_id": "18397500988178795", "comment_url": "https://www.instagram.com/p/DDIJAfeyemG/c/18397500988178795", "post_url": "https://www.instagram.com/reel/DDIJAfeyemG", "text": "I LOVE INSTAGRAM #instagram", "giphy_media_info": null, "owner_username": "mohsinjamindar07", "owner_id": "40564582835", "owner_profile_pic_url": "https://scontent.cdninstagram.com/v/t51.2885-19/x.jpg", "owner_is_verified": false, "timestamp": "2026-02-15T06:27:58.000Z"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/instagram-comments-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Instagram Comments Scraper settings Configure your **Instagram Comments Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | max\_unique\_results\_per\_run | int | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | | max\_results | integer | — | Total comments the crawler will collect per post. | | sort\_order | string | `recent` | Sort comments by most recent or most popular. `recent` paginates the full comment thread; `popular` returns only the top comments Instagram surfaces publicly. One of: `recent`, `popular`. | | fetch\_since | fetch\_since | — | Stop scraping when comments older than this threshold are reached (based on `timestamp`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS). If not provided, no time filtering is applied. | | fetch\_since\_timezone | string | — | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values. | | include\_child\_comments | boolean | false | Also collect replies to comments. Each reply counts as a separate result. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "sort_order": "popular", "include_child_comments": true, "max_results": 200 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sort_order": "popular", "include_child_comments": True, "max_results": 200, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"sort_order": "popular", "include_child_comments": true, "max_results": 200}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/instagram-followers-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Instagram Followers Scraper squid Add URLs or inputs to your **Instagram Followers Scraper** squid. Crawler ID: `5575499b33df1f165e72b29a12892a9e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Instagram Profile URL or Username to scrape followers from. Example: `https://www.instagram.com/leomessi/` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.instagram.com/leomessi/"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.instagram.com/leomessi/"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.instagram.com/leomessi/"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/instagram-followers-scraper/credit-cost Credit cost for the Instagram Followers Scraper 1 credit per follower. # Get Results Source: https://docs.lobstr.io/examples/instagram-followers-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Instagram Followers Scraper Retrieve scraped data from your **Instagram Followers Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields Direct URL to the follower's Instagram profile. Example: `https://www.instagram.com/kholiq__off/` Instagram username of the follower. Example: `kholiq__off` Display name of the follower. Example: `Abduxoliqjon` URL of the follower's Instagram profile picture. Example: `https://instagram.ftas5-1.fna.fbcdn.net/v/t51.82787-19/658962059_18050684966719677_5091061884162648088_n.jpg` Unique internal Instagram identifier (pk) for the follower account. Example: `51385255676` Internal Facebook/Meta identifier linked to the follower account. Example: `17841451590283156` Whether the follower's account is set to private. Example: `False` Whether the follower's account has a verified badge on Instagram. Example: `False` Whether the follower is using the default (anonymous) Instagram profile picture. Example: `False` Unix timestamp of the follower's most recent story/reel media (0 if none). Example: `1776351955` Whether the follower has third-party downloads enabled on their account. Example: `True` Additional enrichment functions enabled for this record. Example: `{}` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"profile_url": "https://www.instagram.com/kholiq__off/", "username": "kholiq__off", "full_name": "Abduxoliqjon", "profile_pic_url": "https://instagram.ftas5-1.fna.fbcdn.net/v/t51.82787-19/658962059_18050684966719677_5091061884162648088_n.jpg", "profile_id": 51385255676, "fbid": 17841451590283156, "is_private": false, "is_verified": false, "has_anonymous_profile_picture": false, "latest_reel_media": 1776351955}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/instagram-followers-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Instagram Followers Scraper settings Configure your **Instagram Followers Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | search | string | — | Optional search query to filter followers by name or username (matches Instagram's native follower-list search bar). Leave empty to scrape all followers. | | max\_unique\_results\_per\_run | int | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | | max\_results | integer | — | Total followers the crawler will collect during the run. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_results": 500, "max_unique_results_per_run": 2000 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_results": 500, "max_unique_results_per_run": 2000, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"max_results": 500, "max_unique_results_per_run": 2000}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/instagram-hashtags-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Instagram Search & Hashtags Scraper squid Add URLs or inputs to your **Instagram Search & Hashtags Scraper** squid. Crawler ID: `84adfa9c253a9a481b2f093a81e019e2` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Instagram hashtag or search keyword. Example: `https://www.instagram.com/explore/tags/travel` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.instagram.com/explore/tags/travel"}]}' ``` ```python Python theme={null} import requests headers = {"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"} response = requests.post("https://api.lobstr.io/v1/tasks", headers=headers, json={"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.instagram.com/explore/tags/travel"}]}) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.instagram.com/explore/tags/travel"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/instagram-hashtags-scraper/credit-cost Credit cost for the Instagram Search & Hashtags Scraper 1 credit per post or reel. # Get Results Source: https://docs.lobstr.io/examples/instagram-hashtags-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Instagram Search & Hashtags Scraper Retrieve scraped data from your **Instagram Search & Hashtags Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Canonical URL of the post or reel. Direct reel URL (reels only). Unique numeric identifier. Example: `3123456789` Shortcode used in the Instagram URL. Example: `C1a2b3c4d` The hashtag or keyword this item was discovered under. Example: `travel` The Instagram hashtag/search page URL. Position within results. Type of media. Example: `image` Whether the media is a video/reel. Whether the media is a multi-slide carousel. Full caption text. Hashtags found in the caption. @-mentions found in the caption. Instagram username of the author. Example: `travel_blogger` Display name of the author. Unique Instagram identifier of the author. Whether the author account is verified. Profile picture URL of the author. Number of likes. Example: `4821` Number of comments. Example: `93` Video play count (reels/videos only). True when the author disabled like and view counts on the post. Unix timestamp of publication. Publication date and time (ISO 8601). Example: `2026-09-10T14:23:00` URL of the main image or video thumbnail. Direct video URL (videos/reels only). Video duration in seconds. Width x height of the media in pixels. Example: `1080x1350` Number of slides in a carousel post. Media details of each carousel slide. Image URL of carousel slides. Accessibility alt text. ### Detail Fields The following fields require `enrich_comments: true` in settings. Latest comments on the post or reel. ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"post_id": "3123456789", "shortcode": "C1a2b3c4d", "input_search": "travel", "owner_username": "travel_blogger", "likes_count": 4821, "comments_count": 93, "timestamp_datetime": "2026-09-10T14:23:00"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/instagram-hashtags-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Instagram Search & Hashtags Scraper settings Configure your **Instagram Search & Hashtags Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | **url** | string | — | Instagram hashtag, keyword, hashtag URL, or search keyword | | **get\_posts** | boolean | true | Include image and carousel posts | | **get\_reels** | boolean | true | Include video reels | | **search\_type** | string | recent | Which tab to scrape: 'recent' or 'top' | | **max\_results** | integer | — | Total posts/reels to collect per hashtag | | **max\_unique\_results\_per\_run** | integer | — | Max unique posts across all tasks in the run | | **fetch\_since** | string | — | Only keep media published after this point (YYYY-MM-DD or 24h, 7d) | | **fetch\_since\_timezone** | string | — | Timezone for interpreting fetch\_since date | | **enrich\_comments** | boolean | false | Collect up to 10 latest comments per post/reel | Setting `enrich_comments: true` enables additional comment fields (`comment_1` through `comment_10`) in results. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"get_posts": true, "get_reels": true, "search_type": "top", "max_results": 500}}' ``` ```python Python theme={null} import requests requests.post("https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"}, json={"params": {"get_posts": true, "get_reels": true, "search_type": "top", "max_results": 500}}) ``` ## Response ```json 201 theme={null} {"params": {"get_posts": true, "get_reels": true, "search_type": "top", "max_results": 500}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/instagram-posts-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Instagram profile URLs, post URLs, or usernames to scrape posts using the lobstr.io API Add Instagram profiles or posts as tasks to your squid. The scraper will extract posts, captions, engagement metrics, and metadata from the provided profiles or individual posts. You can provide a profile URL, a single post/reel URL, or just a username. Crawler ID: `d25fddae52eb78eb385e60bc2adb6d1e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Supported Input Formats **Profile URL:** `https://www.instagram.com/natgeo/` `https://instagram.com/username` **Single Post URL:** `https://www.instagram.com/p/ABC123/` **Reel URL:** `https://www.instagram.com/reel/ABC123/` **Username only:** `natgeo` `cristiano` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Instagram Posts Scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | You can use just the username without the full URL - the scraper will resolve it automatically. When scraping a profile, all public posts will be collected. For single posts, only that specific post data is returned. You can add up to 1000 tasks in a single request for bulk operations. Duplicate URLs are automatically detected and won't be added twice. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.instagram.com/natgeo/"}, {"url": "https://www.instagram.com/cristiano/"} ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Instagram profiles to scrape posts from response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.instagram.com/natgeo/"}, {"url": "https://www.instagram.com/cristiano/"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "tasks": [ { "id": "task_abc123def456", "status": "pending", "params": { "url": "https://www.instagram.com/natgeo/" } }, { "id": "task_abc123def457", "status": "pending", "params": { "url": "https://www.instagram.com/cristiano/" } } ], "duplicated_count": 0 } ``` # Credit Cost Source: https://docs.lobstr.io/examples/instagram-posts-scraper/credit-cost Credit cost for the Instagram Post Scraper 1 credit per post # Get Results Source: https://docs.lobstr.io/examples/instagram-posts-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Instagram Post Scraper Retrieve scraped data from your **Instagram Post Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the Instagram post. Example: `https://www.instagram.com/p/DUvd6BykR38/` Unique identifier for the Instagram post. Example: `3832413338916167164` Shortcode used in the Instagram post URL (e.g. instagram.com/p/\[shortcode]). Example: `DUvd6BykR38` Caption text of the Instagram post. Example: `❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️` Auto-generated or custom accessibility alt text for the post image Instagram username of the post author. Example: `mrbeast` Display name of the post author on Instagram. Example: `MrBeast` Unique Instagram identifier of the post author. Example: `2278169415` Number of likes the post received. Example: `2898085` Number of comments on the post. Example: `13751` Unix timestamp of when the post was published. Example: `1771079293` Publication date and time of the post in ISO 8601 format. Example: `2026-02-14T14:28:13+00:00` Instagram product type (e.g. FEED, REEL, CAROUSEL\_CONTAINER). Example: `carousel_container` Whether the post is pinned to the top of the author's Instagram profile. Example: `false` Width and height dimensions of the post media in pixels. Example: `1440x1800` Direct URL to the post video (for video posts) URL of the main displayed image or thumbnail. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629827271_18523332394073416_4008579742997677296_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Hy97I2CyXXQQ7kNvwGfAaI6&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzNj7CCE471uYwUAiWDybQPi0NQBpzFi04PFuSewkVz7w&oe=69C9B575&_nc_sid=7a9f4b` Whether the post is labeled as a paid partnership on Instagram. Example: `false` Number of slides in a carousel post. Example: `10` Type of Instagram media (GraphImage, GraphVideo, GraphSidecar). Example: `carousel` URL of the 1st slide in the carousel post. Example: `{'id': '3832413256816866684', 'alt': 'Photo shared by MrBeast on February 14, 2026 tagging @thea_booysen. May be an image of suit, dinner jacket, dress and text.', 'width': 1440, 'height': 1800, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629827271_18523332394073416_4008579742997677296_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Hy97I2CyXXQQ7kNvwGfAaI6&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzNj7CCE471uYwUAiWDybQPi0NQBpzFi04PFuSewkVz7w&oe=69C9B575&_nc_sid=7a9f4b'}` URL of the 2nd slide in the carousel post. Example: `{'id': '3832413257831891181', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of sarong and text.', 'width': 808, 'height': 1010, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634070423_18523332418073416_8093318115582682097_n.jpg?stp=c0.101.808.808a_dst-jpg_e15_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=3HsL-n-oOq0Q7kNvwG3aStA&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afw1neVIFTZILzNPQKyQWzcvdicd-l657I9gg_bTOr9Zow&oe=69C9C481&_nc_sid=7a9f4b'}` URL of the 3rd slide in the carousel post. Example: `{'id': '3832413259014697907', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of dress, dinner jacket and text.', 'width': 1321, 'height': 1651, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/628828280_18523332406073416_661484006221494270_n.jpg?stp=c0.165.1321.1321a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=PpJISy8MJbUQ7kNvwGu9ElO&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwaabrPPegiLFrVXFJuW-TEMFN8zPa7x8IkYkfFQ6bnQA&oe=69C9C205&_nc_sid=7a9f4b'}` URL of the 4th slide in the carousel post. Example: `{'id': '3832413260851795496', 'alt': "Photo by MrBeast on February 14, 2026. May be a selfie of one or more people, beard, blonde hair, people smiling and text that says 'BEAST'.", 'width': 1440, 'height': 1800, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634659294_18523332427073416_2348820028961789267_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=pZvvekeApSUQ7kNvwHktBMf&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afwbd7qnGrUIdU3sWHYgC1ztd6TqyPR_ltkDqHBsfdtq9A&oe=69C9C9F0&_nc_sid=7a9f4b'}` URL of the 5th slide in the carousel post. Example: `{'id': '3832413264878356157', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of anklet, ocean, beach, horizon, twilight and text.', 'width': 1440, 'height': 1800, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629296616_18523332445073416_3272753193706244241_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=QP0EhyoUo44Q7kNvwFab3tP&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwNLWj3PAVjPRqkGlKcXRcmTknGlZds8qICCp5AFWP8-Q&oe=69C9C639&_nc_sid=7a9f4b'}` URL of the 6th slide in the carousel post. Example: `{'id': '3832413268342804404', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of the Great Sphinx of Giza and text.', 'width': 1440, 'height': 1800, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634358656_18523332457073416_7842550311075904965_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=0sIpcFjCoj8Q7kNvwHqSLQ8&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfxhrkiYn4VhogYm8UiOAshWVxUE9wtTz5zPaNuBBsSXQg&oe=69C9AB98&_nc_sid=7a9f4b'}` URL of the 7th slide in the carousel post. Example: `{'id': '3832413270037301475', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of standing, flight jacket, sweatshirt and text.', 'width': 1440, 'height': 1800, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/630090071_18523332469073416_8304515702865417393_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=cOmpvup85N0Q7kNvwH9llOF&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwPeAozB8cVn61YX-w7PDfe83uiMLtBU5nqrCsFAD4KIg&oe=69C9CDD8&_nc_sid=7a9f4b'}` URL of the 8th slide in the carousel post. Example: `{'id': '3832413270758732694', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of one or more people, makeup, dress, carpet, dinner jacket and text.', 'width': 1273, 'height': 1591, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634545628_18523332481073416_7755207992088963941_n.jpg?stp=c0.159.1273.1273a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Vrs33l1Xg1gQ7kNvwH8l8sV&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzZ3wUKfkgo0fE7ia5qRc8thfQ2wYggd4rpx3aAMq6gCg&oe=69C9ADC4&_nc_sid=7a9f4b'}` URL of the 9th slide in the carousel post. Example: `{'id': '3832413274751723140', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of text.', 'width': 1440, 'height': 1800, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634484935_18523332490073416_139819657267577549_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=8XJxFs7dlkwQ7kNvwHcDZwu&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfyF8AVntTyDx1FzQ2Q00E8btgWahOyGvdEzjN9_rhNQAA&oe=69C9B971&_nc_sid=7a9f4b'}` URL of the 10th slide in the carousel post. Example: `{'id': '3832413277696138409', 'alt': 'Photo by MrBeast on February 14, 2026. May be an image of standing and text.', 'width': 1440, 'height': 1799, 'timestamp': 1771079291, 'video_url': '', 'media_type': 1, 'display_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/627650519_18523332499073416_3328125859482164788_n.jpg?stp=c0.179.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=vEhjbl6kjOMQ7kNvwGArMWb&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afyq29HMFx3LNGZRW7tKnwV9Rieq2O8j6ktjn5Q3Q-YZTA&oe=69C9D9FC&_nc_sid=7a9f4b'}` Direct URL to the Instagram reel (for reel posts). Example: `https://www.instagram.com/reel/DUvd6BykR38/` URL of the 1st image in the post. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629827271_18523332394073416_4008579742997677296_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Hy97I2CyXXQQ7kNvwGfAaI6&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzNj7CCE471uYwUAiWDybQPi0NQBpzFi04PFuSewkVz7w&oe=69C9B575&_nc_sid=7a9f4b` URL of the 2nd image in the post. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634070423_18523332418073416_8093318115582682097_n.jpg?stp=c0.101.808.808a_dst-jpg_e15_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=3HsL-n-oOq0Q7kNvwG3aStA&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afw1neVIFTZILzNPQKyQWzcvdicd-l657I9gg_bTOr9Zow&oe=69C9C481&_nc_sid=7a9f4b` URL of the 3rd image in the post. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/628828280_18523332406073416_661484006221494270_n.jpg?stp=c0.165.1321.1321a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=PpJISy8MJbUQ7kNvwGu9ElO&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwaabrPPegiLFrVXFJuW-TEMFN8zPa7x8IkYkfFQ6bnQA&oe=69C9C205&_nc_sid=7a9f4b` URL of the 4th image in the post. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634659294_18523332427073416_2348820028961789267_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=pZvvekeApSUQ7kNvwHktBMf&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afwbd7qnGrUIdU3sWHYgC1ztd6TqyPR_ltkDqHBsfdtq9A&oe=69C9C9F0&_nc_sid=7a9f4b` URL of the 5th image in the post. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629296616_18523332445073416_3272753193706244241_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=QP0EhyoUo44Q7kNvwFab3tP&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwNLWj3PAVjPRqkGlKcXRcmTknGlZds8qICCp5AFWP8-Q&oe=69C9C639&_nc_sid=7a9f4b` Instagram accounts listed as co-authors of the post. Example: `[{'id': '1414860336', 'pk': '1414860336', 'username': 'thea_booysen', 'full_name': 'Thea Booysen', 'is_verified': True, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-19/553677442_18530026390012337_655641549738307320_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmV4cGVyaW1lbnRhbCJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=oIKVFf7jgGMQ7kNvwFYjw9x&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afy4BadHMUV0AJoMrP9o2jvgWsqg8T4gpdmiP_QGjevGrQ&oe=69C9ADC9&_nc_sid=7a9f4b'}]` List of hashtags used in the post caption. Example: `[]` Instagram users tagged in the post image. Example: `[{'id': '1414860336', 'pk': '1414860336', 'username': 'thea_booysen', 'full_name': 'Thea Booysen', 'is_verified': True, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.82787-19/553677442_18530026390012337_655641549738307320_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmV4cGVyaW1lbnRhbCJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=oIKVFf7jgGMQ7kNvwFYjw9x&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afy4BadHMUV0AJoMrP9o2jvgWsqg8T4gpdmiP_QGjevGrQ&oe=69C9ADC9&_nc_sid=7a9f4b'}]` Music track used in the reel or video post Text content of the 1st comment on the post. Example: `{'text': 'I counted all hearts and they are 360.', 'user': {'fbid_v2': '17841460150735871', 'user_id': '60126973024', 'username': 'iissoo.00', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/619899761_17971202763005025_5630077481839522707_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=LSu5ObgXScQQ7kNvwFjKzzj&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfvlI0DY5ZvQohRA4kX8HtO-tt0TCXBkSlb5FBLGvMmKrA&oe=6997F268&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18194531053341262', 'created_at': 1771081328, 'is_covered': False, 'child_comment_count': 65}` Text content of the 2nd comment on the post. Example: `{'text': 'I guess bro’s in love guys', 'user': {'fbid_v2': '17841443882254151', 'user_id': '43873214741', 'username': 'dustydreams223', 'is_verified': False, 'profile_pic_url': 'https://scontent-bog2-1.cdninstagram.com/v/t51.2885-19/573323465_1219825463302212_7278921664109726296_n.png?stp=dst-jpg_e0_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xNTAuYzIifQ&_nc_ht=scontent-bog2-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QGhLmIc8QARdS8vwm0Kny7oYaQWxxXKkF_nPXEA-mo_y_lIZbaj6d9nKRDNbyBSIzg&_nc_ohc=eQeo-gpIgOcQ7kNvwHYzINg&_nc_gid=omRD8Pg20lH6Tapvy9TBkg&edm=ACjQdLwBAAAA&ccb=7-5&ig_cache_key=YW5vbnltb3VzX3Byb2ZpbGVfcGlj.3-ccb7-5&oh=00_Afup0HZXhDuCMpVmZ00WOUuBtcpw_lVT9nYr2E52OcRiKg&oe=6997E0AA&_nc_sid=7367d8'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '17942765145114468', 'created_at': 1771080632, 'is_covered': False, 'child_comment_count': 8}` Text content of the 3rd comment on the post. Example: `{'text': 'The captain says a lot ❤️', 'user': {'fbid_v2': '17841463476913344', 'user_id': '63386755897', 'username': 'vfzhadi', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/574700709_17928220749115898_2743900552490211050_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=XcbhBdOpIcsQ7kNvwF7Z520&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfskXlxAaYJHo9Ij4NBmkGMO5wEnaCWbx7-jHl8HKYE_cg&oe=6997F6A1&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18110182822736047', 'created_at': 1771079697, 'is_covered': False, 'child_comment_count': 8}` Text content of the 4th comment on the post. Example: `{'text': 'HA ❤️ HAA💸☠️HA ❤️ HAA💸☠️', 'user': {'fbid_v2': '17841466615936790', 'user_id': '66534324531', 'username': 'aminul_hoque_00', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/470100472_1117866706372817_1131079864457271707_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=ctOcq_vz7eUQ7kNvwFbAdrq&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_Afs-fHYyeII6ZLdFK1suZ1ea7hokaBGWw8Bt-W8D0APyiQ&oe=6997EB43&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '17978647823980784', 'created_at': 1771135797, 'is_covered': False, 'child_comment_count': 5}` Text content of the 5th comment on the post. Example: `{'text': 'His smile seems so genuine. She is lucky', 'user': {'fbid_v2': '17841402025326627', 'user_id': '2133019510', 'username': 'coffeeistlife', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/307819213_1039618516710907_2839511739751543137_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby43MTkuYzIifQ&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=107&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=DSJ0vvl2bEMQ7kNvwH_hvuM&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_Afuw438C9keToAq1o_NTtgx7c54_hgmZ0OEGzlHQXr2teQ&oe=69980D8C&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18090319546872728', 'created_at': 1771116996, 'is_covered': False, 'child_comment_count': 4}` Text content of the 6th comment on the post. Example: `{'text': '🔥😍', 'user': {'fbid_v2': '17841407133269540', 'user_id': '7116325775', 'username': 'puranostalgiabr', 'is_verified': True, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/241330609_572078267474355_636925262237092005_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4zMjAuYzIifQ&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=RARiPnwxTB4Q7kNvwH9C_13&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_Afvzz8qji7qk3lkoTRrQ8N7GltwcTbsHK8yOmbiuwUedHw&oe=6997FB3F&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18348119359230523', 'created_at': 1771112040, 'is_covered': False, 'child_comment_count': 0}` Text content of the 7th comment on the post. Example: `{'text': '😍😍😍', 'user': {'fbid_v2': '17841401588115215', 'user_id': '333812937', 'username': 'soyjulianperezortiz', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/625449212_18557739511052938_6083300413781342683_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby44NDMuYzIifQ&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=2CIQkJQLiiYQ7kNvwHPopik&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsZfrkfT5vd9a6jWkEJIeykmU1VI6HopO_nsaQ2yxGnsw&oe=6997EDEB&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '17909525382167534', 'created_at': 1771147179, 'is_covered': False, 'child_comment_count': 0}` Text content of the 8th comment on the post. Example: `{'text': '😍', 'user': {'fbid_v2': '17841401994547980', 'user_id': '2143842484', 'username': 'bubuit05', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/497879459_18483237493066485_5675764821276267624_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=109&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=agRVAFQsnHgQ7kNvwEn47I_&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsGsUdAChlxxlOlmzH8ijhPlYmu5d6Dn1li3vCA4KgV-g&oe=6998088F&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '17936954832154444', 'created_at': 1771087500, 'is_covered': False, 'child_comment_count': 0}` Text content of the 9th comment on the post. Example: `{'text': '30 seconds ago', 'user': {'fbid_v2': '17841466990603519', 'user_id': '66988153020', 'username': 'back2.cooked', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/598036905_17916784101233021_2845029466352532508_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=CXvbp94Ym-QQ7kNvwGhRwu_&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfuQXSEtW0tCYVlpgu9mB1mAfqrdag3ND6SOAmlPd4SXOg&oe=6997EA64&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18106229494696390', 'created_at': 1771079340, 'is_covered': False, 'child_comment_count': 7}` Text content of the 10th comment on the post. Example: `{'text': 'I love you so much ❤️', 'user': {'fbid_v2': '17841400370102107', 'user_id': '1414860336', 'username': 'thea_booysen', 'is_verified': True, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/553677442_18530026390012337_655641549738307320_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=jI4Zrv23jeoQ7kNvwE24A_j&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsVEVMKBuFGMg8hiqvPNzxCFR2lehpYlzM_1sGTQJWJSQ&oe=6998033F&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18556298086009047', 'created_at': 1771080762, 'is_covered': False, 'child_comment_count': 142}` Text content of the 11th comment on the post. Example: `{'text': 'Jimmy is looking jacked 💪🏻', 'user': {'fbid_v2': '17841407346852301', 'user_id': '7218412895', 'username': 'wall', 'is_verified': True, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/590403602_18329195224244896_1051429854083726398_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=SdcXEQslNpYQ7kNvwFdJs7v&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsmHMMSe1iggGlmzNvXxjGQh6lRQw1ZmBmDCqaMqOdmfA&oe=6997DBDD&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18093072878481286', 'created_at': 1771079756, 'is_covered': False, 'child_comment_count': 6}` Text content of the 12th comment on the post. Example: `{'text': 'Here the ones that think you are a perfect couple! We love you guys 💚 ——>', 'user': {'fbid_v2': '17841401432639989', 'user_id': '1279343754', 'username': 'jonathangomeztv', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/440895684_976237910512798_7640237670327447808_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDE4LmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=BwXbEdL2kOQQ7kNvwHkNnvF&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AftVB0g2zLqqFwDc7uFBK3Q2oINd_5mdtfvhRfPcWqIvKw&oe=6998129F&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18007278725837177', 'created_at': 1771079363, 'is_covered': False, 'child_comment_count': 5}` Text content of the 13th comment on the post. Example: `{'text': 'Alguien que te apoye y te mire como Thea mira a Jimmy... Otra cosa hermano ❤️\u200d🩹', 'user': {'fbid_v2': '17841441381584761', 'user_id': '41318091386', 'username': 'alexxalphawolf', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/459330808_1877118572755098_8058557357144295504_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby45NzMuYzIifQ&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=106&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=xwkTOM2kfpgQ7kNvwEhewYN&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfuDrpv4vwQEP4bBxlJNil_CUaaVr3Zuy1HQkpJ6NIwqEA&oe=6997F848&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '17852482149626548', 'created_at': 1771081193, 'is_covered': False, 'child_comment_count': 12}` Text content of the 14th comment on the post. Example: `{'text': 'Aaaa la mama de Nolan 🥺', 'user': {'fbid_v2': '17841469260177088', 'user_id': '69256708672', 'username': 'juan.acosta9774', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/565992519_17898303309308673_2043076440287046363_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby45NTMuYzIifQ&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=109&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=Z4XM21hTbk0Q7kNvwFNmw5u&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfvxWzLOWHaspA2VInQCXPiTTv-mHT2sSS48ruU8QzdfXA&oe=6997F954&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '17847438210660300', 'created_at': 1771096289, 'is_covered': False, 'child_comment_count': 1}` Text content of the 15th comment on the post. Example: `{'text': 'cute 😭❤️', 'user': {'fbid_v2': '17841408283836383', 'user_id': '8371068127', 'username': 'starlight.avi', 'is_verified': False, 'profile_pic_url': 'https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/629369157_18302647696276128_4393177530793477705_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=xlepmkGd8fkQ7kNvwGnlNmR&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfvYUczQa8QuZoEyBeRS53glXXbNsi3CLgDN9AhX8kO_IA&oe=6997E71B&_nc_sid=10d13b'}, 'giphy_id': None, 'giphy_url': None, 'comment_id': '18102351191507791', 'created_at': 1771131487, 'is_covered': False, 'child_comment_count': 0}` Whether the post is a video (media type video or reel). Example: `false` List of @usernames mentioned in the post caption. Example: `['thea_booysen']` Profile picture URL of the post author. Example: `https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/...` The input URL or username this post was collected from. Example: `https://www.instagram.com/mrbeast/` Additional enrichment functions enabled for this record. Example: `{}` Timestamp when the post data was scraped. Example: `2026-03-25T14:16:55.485512+00:00` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 32896, "object": "result", "squid": "e8e981d91662b7296f4041ad5a412331", "run": "9d4de00a69251d3975c6dd5fd899da0d", "url": "https://www.instagram.com/p/DUvd6BykR38/", "post_id": "3832413338916167164", "shortcode": "DUvd6BykR38", "caption": "❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️", "alt": null, "owner_username": "mrbeast", "owner_full_name": "MrBeast", "owner_id": "2278169415", "likes_count": 2898085, "comments_count": 13751, "timestamp": 1771079293, "timestamp_datetime": "2026-02-14T14:28:13+00:00", "product_type": "carousel_container", "is_pinned": false, "dimensions": "1440x1800", "video_url": null, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629827271_18523332394073416_4008579742997677296_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Hy97I2CyXXQQ7kNvwGfAaI6&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzNj7CCE471uYwUAiWDybQPi0NQBpzFi04PFuSewkVz7w&oe=69C9B575&_nc_sid=7a9f4b", "is_paid_partnership": false, "carousel_media_count": 10, "media_type": "carousel", "child_post_1": { "id": "3832413256816866684", "alt": "Photo shared by MrBeast on February 14, 2026 tagging @thea_booysen. May be an image of suit, dinner jacket, dress and text.", "width": 1440, "height": 1800, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629827271_18523332394073416_4008579742997677296_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Hy97I2CyXXQQ7kNvwGfAaI6&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzNj7CCE471uYwUAiWDybQPi0NQBpzFi04PFuSewkVz7w&oe=69C9B575&_nc_sid=7a9f4b" }, "child_post_2": { "id": "3832413257831891181", "alt": "Photo by MrBeast on February 14, 2026. May be an image of sarong and text.", "width": 808, "height": 1010, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634070423_18523332418073416_8093318115582682097_n.jpg?stp=c0.101.808.808a_dst-jpg_e15_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=3HsL-n-oOq0Q7kNvwG3aStA&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afw1neVIFTZILzNPQKyQWzcvdicd-l657I9gg_bTOr9Zow&oe=69C9C481&_nc_sid=7a9f4b" }, "child_post_3": { "id": "3832413259014697907", "alt": "Photo by MrBeast on February 14, 2026. May be an image of dress, dinner jacket and text.", "width": 1321, "height": 1651, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/628828280_18523332406073416_661484006221494270_n.jpg?stp=c0.165.1321.1321a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=PpJISy8MJbUQ7kNvwGu9ElO&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwaabrPPegiLFrVXFJuW-TEMFN8zPa7x8IkYkfFQ6bnQA&oe=69C9C205&_nc_sid=7a9f4b" }, "child_post_4": { "id": "3832413260851795496", "alt": "Photo by MrBeast on February 14, 2026. May be a selfie of one or more people, beard, blonde hair, people smiling and text that says 'BEAST'.", "width": 1440, "height": 1800, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634659294_18523332427073416_2348820028961789267_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=pZvvekeApSUQ7kNvwHktBMf&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afwbd7qnGrUIdU3sWHYgC1ztd6TqyPR_ltkDqHBsfdtq9A&oe=69C9C9F0&_nc_sid=7a9f4b" }, "child_post_5": { "id": "3832413264878356157", "alt": "Photo by MrBeast on February 14, 2026. May be an image of anklet, ocean, beach, horizon, twilight and text.", "width": 1440, "height": 1800, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629296616_18523332445073416_3272753193706244241_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=QP0EhyoUo44Q7kNvwFab3tP&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwNLWj3PAVjPRqkGlKcXRcmTknGlZds8qICCp5AFWP8-Q&oe=69C9C639&_nc_sid=7a9f4b" }, "child_post_6": { "id": "3832413268342804404", "alt": "Photo by MrBeast on February 14, 2026. May be an image of the Great Sphinx of Giza and text.", "width": 1440, "height": 1800, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634358656_18523332457073416_7842550311075904965_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=0sIpcFjCoj8Q7kNvwHqSLQ8&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfxhrkiYn4VhogYm8UiOAshWVxUE9wtTz5zPaNuBBsSXQg&oe=69C9AB98&_nc_sid=7a9f4b" }, "child_post_7": { "id": "3832413270037301475", "alt": "Photo by MrBeast on February 14, 2026. May be an image of standing, flight jacket, sweatshirt and text.", "width": 1440, "height": 1800, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/630090071_18523332469073416_8304515702865417393_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=cOmpvup85N0Q7kNvwH9llOF&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwPeAozB8cVn61YX-w7PDfe83uiMLtBU5nqrCsFAD4KIg&oe=69C9CDD8&_nc_sid=7a9f4b" }, "child_post_8": { "id": "3832413270758732694", "alt": "Photo by MrBeast on February 14, 2026. May be an image of one or more people, makeup, dress, carpet, dinner jacket and text.", "width": 1273, "height": 1591, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634545628_18523332481073416_7755207992088963941_n.jpg?stp=c0.159.1273.1273a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Vrs33l1Xg1gQ7kNvwH8l8sV&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzZ3wUKfkgo0fE7ia5qRc8thfQ2wYggd4rpx3aAMq6gCg&oe=69C9ADC4&_nc_sid=7a9f4b" }, "child_post_9": { "id": "3832413274751723140", "alt": "Photo by MrBeast on February 14, 2026. May be an image of text.", "width": 1440, "height": 1800, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634484935_18523332490073416_139819657267577549_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=8XJxFs7dlkwQ7kNvwHcDZwu&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfyF8AVntTyDx1FzQ2Q00E8btgWahOyGvdEzjN9_rhNQAA&oe=69C9B971&_nc_sid=7a9f4b" }, "child_post_10": { "id": "3832413277696138409", "alt": "Photo by MrBeast on February 14, 2026. May be an image of standing and text.", "width": 1440, "height": 1799, "timestamp": 1771079291, "video_url": "", "media_type": 1, "display_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/627650519_18523332499073416_3328125859482164788_n.jpg?stp=c0.179.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=vEhjbl6kjOMQ7kNvwGArMWb&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afyq29HMFx3LNGZRW7tKnwV9Rieq2O8j6ktjn5Q3Q-YZTA&oe=69C9D9FC&_nc_sid=7a9f4b" }, "reel_url": "https://www.instagram.com/reel/DUvd6BykR38/", "image_1": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629827271_18523332394073416_4008579742997677296_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=Hy97I2CyXXQQ7kNvwGfAaI6&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfzNj7CCE471uYwUAiWDybQPi0NQBpzFi04PFuSewkVz7w&oe=69C9B575&_nc_sid=7a9f4b", "image_2": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634070423_18523332418073416_8093318115582682097_n.jpg?stp=c0.101.808.808a_dst-jpg_e15_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=3HsL-n-oOq0Q7kNvwG3aStA&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afw1neVIFTZILzNPQKyQWzcvdicd-l657I9gg_bTOr9Zow&oe=69C9C481&_nc_sid=7a9f4b", "image_3": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/628828280_18523332406073416_661484006221494270_n.jpg?stp=c0.165.1321.1321a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=PpJISy8MJbUQ7kNvwGu9ElO&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwaabrPPegiLFrVXFJuW-TEMFN8zPa7x8IkYkfFQ6bnQA&oe=69C9C205&_nc_sid=7a9f4b", "image_4": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/634659294_18523332427073416_2348820028961789267_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=pZvvekeApSUQ7kNvwHktBMf&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afwbd7qnGrUIdU3sWHYgC1ztd6TqyPR_ltkDqHBsfdtq9A&oe=69C9C9F0&_nc_sid=7a9f4b", "image_5": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-15/629296616_18523332445073416_3272753193706244241_n.jpg?stp=c0.180.1440.1440a_dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=QP0EhyoUo44Q7kNvwFab3tP&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_AfwNLWj3PAVjPRqkGlKcXRcmTknGlZds8qICCp5AFWP8-Q&oe=69C9C639&_nc_sid=7a9f4b", "coauthors": [ { "id": "1414860336", "pk": "1414860336", "username": "thea_booysen", "full_name": "Thea Booysen", "is_verified": true, "profile_pic_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-19/553677442_18530026390012337_655641549738307320_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmV4cGVyaW1lbnRhbCJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=oIKVFf7jgGMQ7kNvwFYjw9x&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afy4BadHMUV0AJoMrP9o2jvgWsqg8T4gpdmiP_QGjevGrQ&oe=69C9ADC9&_nc_sid=7a9f4b" } ], "hashtags": [], "user_tags": [ { "id": "1414860336", "pk": "1414860336", "username": "thea_booysen", "full_name": "Thea Booysen", "is_verified": true, "profile_pic_url": "https://scontent-ber1-1.cdninstagram.com/v/t51.82787-19/553677442_18530026390012337_655641549738307320_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmV4cGVyaW1lbnRhbCJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2gHa9ZAlfDCL2uC0xsRQSYqMenrKa-jyg7vYDL2UsBn_5Mm7nJIENahGvk54i7DDtQM&_nc_ohc=oIKVFf7jgGMQ7kNvwFYjw9x&_nc_gid=XrreQMmBbpLHaA0ESwHNCA&edm=AP4sbd4BAAAA&ccb=7-5&oh=00_Afy4BadHMUV0AJoMrP9o2jvgWsqg8T4gpdmiP_QGjevGrQ&oe=69C9ADC9&_nc_sid=7a9f4b" } ], "music": null, "comment_1": { "text": "I counted all hearts and they are 360.", "user": { "fbid_v2": "17841460150735871", "user_id": "60126973024", "username": "iissoo.00", "is_verified": false, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/619899761_17971202763005025_5630077481839522707_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=LSu5ObgXScQQ7kNvwFjKzzj&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfvlI0DY5ZvQohRA4kX8HtO-tt0TCXBkSlb5FBLGvMmKrA&oe=6997F268&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18194531053341262", "created_at": 1771081328, "is_covered": false, "child_comment_count": 65 }, "comment_2": { "text": "I guess bro’s in love guys", "user": { "fbid_v2": "17841443882254151", "user_id": "43873214741", "username": "dustydreams223", "is_verified": false, "profile_pic_url": "https://scontent-bog2-1.cdninstagram.com/v/t51.2885-19/573323465_1219825463302212_7278921664109726296_n.png?stp=dst-jpg_e0_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xNTAuYzIifQ&_nc_ht=scontent-bog2-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QGhLmIc8QARdS8vwm0Kny7oYaQWxxXKkF_nPXEA-mo_y_lIZbaj6d9nKRDNbyBSIzg&_nc_ohc=eQeo-gpIgOcQ7kNvwHYzINg&_nc_gid=omRD8Pg20lH6Tapvy9TBkg&edm=ACjQdLwBAAAA&ccb=7-5&ig_cache_key=YW5vbnltb3VzX3Byb2ZpbGVfcGlj.3-ccb7-5&oh=00_Afup0HZXhDuCMpVmZ00WOUuBtcpw_lVT9nYr2E52OcRiKg&oe=6997E0AA&_nc_sid=7367d8" }, "giphy_id": null, "giphy_url": null, "comment_id": "17942765145114468", "created_at": 1771080632, "is_covered": false, "child_comment_count": 8 }, "comment_3": { "text": "The captain says a lot ❤️", "user": { "fbid_v2": "17841463476913344", "user_id": "63386755897", "username": "vfzhadi", "is_verified": false, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/574700709_17928220749115898_2743900552490211050_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=XcbhBdOpIcsQ7kNvwF7Z520&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfskXlxAaYJHo9Ij4NBmkGMO5wEnaCWbx7-jHl8HKYE_cg&oe=6997F6A1&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18110182822736047", "created_at": 1771079697, "is_covered": false, "child_comment_count": 8 }, "comment_4": { "text": "HA ❤️ HAA💸☠️HA ❤️ HAA💸☠️", "user": { "fbid_v2": "17841466615936790", "user_id": "66534324531", "username": "aminul_hoque_00", "is_verified": false, "profile_pic_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/470100472_1117866706372817_1131079864457271707_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=ctOcq_vz7eUQ7kNvwFbAdrq&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_Afs-fHYyeII6ZLdFK1suZ1ea7hokaBGWw8Bt-W8D0APyiQ&oe=6997EB43&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "17978647823980784", "created_at": 1771135797, "is_covered": false, "child_comment_count": 5 }, "comment_5": { "text": "His smile seems so genuine. She is lucky", "user": { "fbid_v2": "17841402025326627", "user_id": "2133019510", "username": "coffeeistlife", "is_verified": false, "profile_pic_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/307819213_1039618516710907_2839511739751543137_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby43MTkuYzIifQ&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=107&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=DSJ0vvl2bEMQ7kNvwH_hvuM&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_Afuw438C9keToAq1o_NTtgx7c54_hgmZ0OEGzlHQXr2teQ&oe=69980D8C&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18090319546872728", "created_at": 1771116996, "is_covered": false, "child_comment_count": 4 }, "comment_6": { "text": "🔥😍", "user": { "fbid_v2": "17841407133269540", "user_id": "7116325775", "username": "puranostalgiabr", "is_verified": true, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/241330609_572078267474355_636925262237092005_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4zMjAuYzIifQ&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=RARiPnwxTB4Q7kNvwH9C_13&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_Afvzz8qji7qk3lkoTRrQ8N7GltwcTbsHK8yOmbiuwUedHw&oe=6997FB3F&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18348119359230523", "created_at": 1771112040, "is_covered": false, "child_comment_count": 0 }, "comment_7": { "text": "😍😍😍", "user": { "fbid_v2": "17841401588115215", "user_id": "333812937", "username": "soyjulianperezortiz", "is_verified": false, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/625449212_18557739511052938_6083300413781342683_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby44NDMuYzIifQ&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=2CIQkJQLiiYQ7kNvwHPopik&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsZfrkfT5vd9a6jWkEJIeykmU1VI6HopO_nsaQ2yxGnsw&oe=6997EDEB&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "17909525382167534", "created_at": 1771147179, "is_covered": false, "child_comment_count": 0 }, "comment_8": { "text": "😍", "user": { "fbid_v2": "17841401994547980", "user_id": "2143842484", "username": "bubuit05", "is_verified": false, "profile_pic_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/497879459_18483237493066485_5675764821276267624_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=109&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=agRVAFQsnHgQ7kNvwEn47I_&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsGsUdAChlxxlOlmzH8ijhPlYmu5d6Dn1li3vCA4KgV-g&oe=6998088F&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "17936954832154444", "created_at": 1771087500, "is_covered": false, "child_comment_count": 0 }, "comment_9": { "text": "30 seconds ago", "user": { "fbid_v2": "17841466990603519", "user_id": "66988153020", "username": "back2.cooked", "is_verified": false, "profile_pic_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/598036905_17916784101233021_2845029466352532508_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=CXvbp94Ym-QQ7kNvwGhRwu_&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfuQXSEtW0tCYVlpgu9mB1mAfqrdag3ND6SOAmlPd4SXOg&oe=6997EA64&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18106229494696390", "created_at": 1771079340, "is_covered": false, "child_comment_count": 7 }, "comment_10": { "text": "I love you so much ❤️", "user": { "fbid_v2": "17841400370102107", "user_id": "1414860336", "username": "thea_booysen", "is_verified": true, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/553677442_18530026390012337_655641549738307320_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=jI4Zrv23jeoQ7kNvwE24A_j&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsVEVMKBuFGMg8hiqvPNzxCFR2lehpYlzM_1sGTQJWJSQ&oe=6998033F&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18556298086009047", "created_at": 1771080762, "is_covered": false, "child_comment_count": 142 }, "comment_11": { "text": "Jimmy is looking jacked 💪🏻", "user": { "fbid_v2": "17841407346852301", "user_id": "7218412895", "username": "wall", "is_verified": true, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/590403602_18329195224244896_1051429854083726398_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=SdcXEQslNpYQ7kNvwFdJs7v&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfsmHMMSe1iggGlmzNvXxjGQh6lRQw1ZmBmDCqaMqOdmfA&oe=6997DBDD&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18093072878481286", "created_at": 1771079756, "is_covered": false, "child_comment_count": 6 }, "comment_12": { "text": "Here the ones that think you are a perfect couple! We love you guys 💚 ——>", "user": { "fbid_v2": "17841401432639989", "user_id": "1279343754", "username": "jonathangomeztv", "is_verified": false, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/440895684_976237910512798_7640237670327447808_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDE4LmMyIn0&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=BwXbEdL2kOQQ7kNvwHkNnvF&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AftVB0g2zLqqFwDc7uFBK3Q2oINd_5mdtfvhRfPcWqIvKw&oe=6998129F&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18007278725837177", "created_at": 1771079363, "is_covered": false, "child_comment_count": 5 }, "comment_13": { "text": "Alguien que te apoye y te mire como Thea mira a Jimmy... Otra cosa hermano ❤️‍🩹", "user": { "fbid_v2": "17841441381584761", "user_id": "41318091386", "username": "alexxalphawolf", "is_verified": false, "profile_pic_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/459330808_1877118572755098_8058557357144295504_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby45NzMuYzIifQ&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_cat=106&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=xwkTOM2kfpgQ7kNvwEhewYN&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfuDrpv4vwQEP4bBxlJNil_CUaaVr3Zuy1HQkpJ6NIwqEA&oe=6997F848&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "17852482149626548", "created_at": 1771081193, "is_covered": false, "child_comment_count": 12 }, "comment_14": { "text": "Aaaa la mama de Nolan 🥺", "user": { "fbid_v2": "17841469260177088", "user_id": "69256708672", "username": "juan.acosta9774", "is_verified": false, "profile_pic_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/565992519_17898303309308673_2043076440287046363_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby45NTMuYzIifQ&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=109&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=Z4XM21hTbk0Q7kNvwFNmw5u&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfvxWzLOWHaspA2VInQCXPiTTv-mHT2sSS48ruU8QzdfXA&oe=6997F954&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "17847438210660300", "created_at": 1771096289, "is_covered": false, "child_comment_count": 1 }, "comment_15": { "text": "cute 😭❤️", "user": { "fbid_v2": "17841408283836383", "user_id": "8371068127", "username": "starlight.avi", "is_verified": false, "profile_pic_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.2885-19/629369157_18302647696276128_4393177530793477705_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2QFy67K-2tJZVpc5mghVSGhSbb4B6q0X8AQWnVq63Wb3ERgK-pYb8h_HZrvycSa9eRY&_nc_ohc=xlepmkGd8fkQ7kNvwGnlNmR&_nc_gid=w_5zFa1XPB3CcA4Dp0HZrg&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfvYUczQa8QuZoEyBeRS53glXXbNsi3CLgDN9AhX8kO_IA&oe=6997E71B&_nc_sid=10d13b" }, "giphy_id": null, "giphy_url": null, "comment_id": "18102351191507791", "created_at": 1771131487, "is_covered": false, "child_comment_count": 0 }, "is_video": false, "mentions": [], "owner_profile_pic_url": "https://scontent-mrs2-2.cdninstagram.com/v/t51.82787-19/683576066_18653628823019147_8963256133417732520_n.jpg", "source_url": "https://www.instagram.com/natgeo/", "functions": null, "scraping_time": "2026-03-25T14:16:55.485512+00:00", "native_id": 32896 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/instagram-posts-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Instagram Posts Scraper settings Configure your Instagram Posts Scraper squid settings. Control the maximum number of posts collected, filter by time range, and exclude pinned posts. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Total posts the crawler will collect per profile | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum number of unique posts retrieved across all tasks in the entire run | | **fetch\_since** | string | unlimited | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **skip\_pinned\_posts** | boolean | false | If enabled, pinned posts will be excluded from the results | | **enrich\_comments** | boolean | true | Collect up to 15 latest comments per post (1 extra request per post). Disable for much faster scraping | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since` to only collect recent posts - great for monitoring accounts for new content. Leave limits empty or null for unlimited collection. Enable `skip_pinned_posts` when you only want organic timeline posts without promotional pinned content. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "export_unique_results": true, "params": { "max_results": 50, "max_unique_results_per_run": 1000, "fetch_since": "7d", "skip_pinned_posts": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "export_unique_results": True, "params": { "max_results": 50, "max_unique_results_per_run": 1000, "fetch_since": "7d", "skip_pinned_posts": False } } ) data = response.json() print(f"Max results: {data['params']['max_results']}") print(f"Fetch since: {data['params']['fetch_since']}") ``` ## Response ```json 201 theme={null} { "export_unique_results": true, "params": { "max_results": 50, "max_unique_results_per_run": 1000, "fetch_since": "7d", "skip_pinned_posts": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/instagram-profile-scraper/add-tasks POST https://api.lobstr.io/v2/squid/{squid_id}/task Add Instagram profile URLs or usernames to scrape using the lobstr.io API Add Instagram profiles as tasks to your squid. You can provide either a full profile URL or just the username. Crawler ID: `5c55ffbf10fbbc7ee63ebb2bcaa332b7` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Supported Input Formats **Profile URL:** `https://www.instagram.com/username/` `https://instagram.com/username` **Username only:** `leomessi` `cristiano` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Instagram Profile URL or Username to scrape profile information from | You can use just the username without the full URL - the scraper will resolve it automatically. Private profiles will return limited data. Only public profile information is accessible. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.instagram.com/leomessi/" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "url": "https://www.instagram.com/leomessi/" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123def456", "status": "pending", "created_at": "2025-01-15T10:30:00Z", "url": "https://www.instagram.com/leomessi/" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/instagram-profile-scraper/credit-cost Credit cost for the Instagram Profile Scraper 1 credit per profile. # Get Results Source: https://docs.lobstr.io/examples/instagram-profile-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Instagram Profile Scraper Retrieve scraped data from your **Instagram Profile Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the Instagram profile. Example: `https://www.instagram.com/rap/` Instagram username of the account. Example: `rap` Display name of the Instagram account. Example: `RapTV` Bio text shown on the Instagram profile page. Example: `What's Next in Hip Hop & Culture‼️ 🔋 a @lowbattery brand 🌐 @bars @concert @drip ⬇️Purchase RapTV's "What A Time" Zine` URL of the account's Instagram profile picture. Example: `https://scontent-sea1-1.cdninstagram.com/v/t51.2885-19/606497536_18573290305036669_6922238950325835238_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=2lxJXKMwDVIQ7kNvwGOIvuK&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_Afobuv01_l-OtINPJ-wg-xxgJlqZyMUEyjk5yy9AZcqefQ&oe=6962A8EB&_nc_sid=8b3546` Unique internal identifier for the Instagram account. Example: `1459940668` Internal Facebook/Meta identifier linked to the Instagram account. Example: `17841401100062811` Total number of Instagram followers. Example: `12747786` Total number of accounts this profile follows. Example: `1607` Total number of posts published by this account. Example: `55976` Whether the Instagram account is set to private. Example: `false` Whether the account has a verified badge on Instagram. Example: `true` Whether the account is registered as an Instagram Business account. Example: `false` Whether the account is registered as a Professional (Creator or Business) account. Example: `true` Whether the account was created recently on Instagram. Example: `false` Category or niche of the account (e.g. Public Figure, Artist, Restaurant). Example: `Media/news company` Email address listed on the Instagram business profile Phone number listed on the Instagram business profile Preferred contact method configured on the Instagram business profile. Example: `UNKNOWN` First external link listed in the Instagram profile bio. Example: `{'url': 'https://linkin.bio/raptv', 'title': '', 'lynx_url': 'https://l.instagram.com/?u=https%3A%2F%2Flinkin.bio%2Fraptv&e=AT1y8V__CJ3AzWE2k-FOtdtu84FoBDS37Q5xu8e2Qwu26y5gfDH6fPjwXDM3yPFOg1_2j4HyXudJsgN_Ss8YZ0ZBXMeMZKkP', 'link_type': 'external'}` Second external link listed in the Instagram profile bio. Example: `{'url': 'http://whatatimezine.com', 'title': 'RapTV Zine', 'lynx_url': 'https://l.instagram.com/?u=http%3A%2F%2Fwhatatimezine.com%2F&e=AT3B5UMx3zD_egGreWtkNTBf8Ns1ylMOeK6w9F3TuIJjOZdXssF9nDM2MpEkBAs6H8FL9ACXPzGtY2mjq5e1lBPPCYmRh3RG', 'link_type': 'external'}` Third external link listed in the Instagram profile bio. Example: `{'url': 'https://teamwater.org/', 'title': 'Team Water', 'lynx_url': 'https://l.instagram.com/?u=https%3A%2F%2Fteamwater.org%2F&e=AT2j42otjhH4ej8VjauY1AwMkA7Enhrkkib8Fi8SqcfWMorigPVsTSohy1Wm6VHBVA684itOmoP6u2O4DTSw0Od7yBj6zz6H', 'link_type': 'external'}` All external links listed in the Instagram profile bio. Example: `[{'url': 'https://linkin.bio/raptv', 'title': '', 'lynx_url': 'https://l.instagram.com/?u=https%3A%2F%2Flinkin.bio%2Fraptv&e=AT1y8V__CJ3AzWE2k-FOtdtu84FoBDS37Q5xu8e2Qwu26y5gfDH6fPjwXDM3yPFOg1_2j4HyXudJsgN_Ss8YZ0ZBXMeMZKkP', 'link_type': 'external'}, {'url': 'http://whatatimezine.com', 'title': 'RapTV Zine', 'lynx_url': 'https://l.instagram.com/?u=http%3A%2F%2Fwhatatimezine.com%2F&e=AT3B5UMx3zD_egGreWtkNTBf8Ns1ylMOeK6w9F3TuIJjOZdXssF9nDM2MpEkBAs6H8FL9ACXPzGtY2mjq5e1lBPPCYmRh3RG', 'link_type': 'external'}, {'url': 'https://teamwater.org/', 'title': 'Team Water', 'lynx_url': 'https://l.instagram.com/?u=https%3A%2F%2Fteamwater.org%2F&e=AT2j42otjhH4ej8VjauY1AwMkA7Enhrkkib8Fi8SqcfWMorigPVsTSohy1Wm6VHBVA684itOmoP6u2O4DTSw0Od7yBj6zz6H', 'link_type': 'external'}]` Total number of story highlight reels on the profile. Example: `9` Total number of IGTV videos published by this account. Example: `73` Whether the account has a linked broadcast channel on Instagram. Example: `false` Whether the account has Instagram Clips (Reels) content. Example: `true` Whether the account has Instagram Guides. Example: `false` URL of the 1st most recent IGTV video. Example: `{'id': '2990969497965202326', 'url': 'https://www.instagram.com/reel/CmCDulcPouW/', 'likes': 53671, 'title': '', 'views': 270959, 'caption': "#SauceWalka met his biggest fan‼👀 Walka met a fan who he deeply impacted. How do y'all feel about this⁉🤔", 'comments': 458, 'duration': 87.466, 'location': None, 'posted_at': 1670771399, 'shortcode': 'CmCDulcPouW', 'thumbnail_url': 'https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/319123546_157570383298762_6241505073778244047_n.jpg?stp=c0.135.1080.1080a_dst-jpg_e35_s640x640_sh0.08_tt6&_nc_ht=scontent-sea5-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=lp6CmfKnNQ0Q7kNvwFzF7Db&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfqYcgvDGdlW_F8QBaiI5mFbVF1xX2nWGKMQzvWJC_3tyQ&oe=6962C607&_nc_sid=8b3546'}` URL of the 2nd most recent IGTV video. Example: `{'id': '2893228810109674349', 'url': 'https://www.instagram.com/reel/Cgm0EYYg2Nt/', 'likes': 94409, 'title': '', 'views': 498586, 'caption': "#DJKhaled trying to hit the Mega Millions for the $1 Billion cash prize. Did y'all cop a ticket⁉️ Follow @BARS for behind the scenes content‼️", 'comments': 698, 'duration': 24.7, 'location': None, 'posted_at': 1659119853, 'shortcode': 'Cgm0EYYg2Nt', 'thumbnail_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/296164237_591475512329436_3321149571347964908_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=HyQoqdl3TdMQ7kNvwGuat83&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfoHCA3EKBDke63AjLJrvy-vx8d30TB2Coq5jcNOP8o10g&oe=6962AB6D&_nc_sid=8b3546'}` URL of the 3rd most recent IGTV video. Example: `{'id': '2893131765138890716', 'url': 'https://www.instagram.com/reel/CgmeAMNgJ_c/', 'likes': 215238, 'title': '', 'views': 915592, 'caption': 'Will Smith just released a 5 minute video addressing him slapping Chris Rock, as well as apologizing to him and his family‼️😳', 'comments': 1610, 'duration': 50.366, 'location': None, 'posted_at': 1659108234, 'shortcode': 'CgmeAMNgJ_c', 'thumbnail_url': 'https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/296436953_3345570412396450_1515402937347091776_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea5-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=aH7BIxYEE-0Q7kNvwHOWlsc&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_Afp5Oa4gBnJH62Oe4W3grJHD7jWOJQ-Z2Qjq2LRE6LSRcw&oe=6962DDDD&_nc_sid=8b3546'}` URL of the 4th most recent IGTV video. Example: `{'id': '2892870456929653049', 'url': 'https://www.instagram.com/reel/Cglilp-g5E5/', 'likes': 52183, 'title': '', 'views': 284444, 'caption': "#Drake kicking off his October World Weekend concert. Y'all rockin with it⁉️ Follow @concert for more‼️ 🎥 @complexcanada", 'comments': 274, 'duration': 56.366, 'location': None, 'posted_at': 1659077276, 'shortcode': 'Cglilp-g5E5', 'thumbnail_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/295911941_722017562193368_4950961007415968397_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=108&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=HDeXsVapBBwQ7kNvwEgm58o&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfqhhjUn-99-pPay_mtQ9OZi-JlWz58vJv3tC0OI5KgxuA&oe=6962B740&_nc_sid=8b3546'}` URL of the 1st most recent post. Example: `{'id': '3781759654318683349', 'url': 'https://www.instagram.com/p/DR7gl51kbTV/', 'type': 'GraphSidecar', 'likes': 66646, 'views': None, 'caption': 'The #RapTV Power Rankings for November 2025 have been revealed‼️🔥 Click the link in bio to see why these artists made the cut 👀', 'comments': 650, 'is_video': False, 'location': None, 'posted_at': 1765040903, 'shortcode': 'DR7gl51kbTV', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/591164148_18569581537036669_7700805801646043012_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=101', 'media_count': 3, 'product_type': None, 'tagged_users': None}` URL of the 2nd most recent post. Example: `{'id': '3781084211714274896', 'url': 'https://www.instagram.com/p/DR5HA65ETZQ/', 'type': 'GraphSidecar', 'likes': 44670, 'views': None, 'caption': "Hit the link in bio to find out more about our Next-Up Class of 2025‼️ Y'all rockin' with any of them already⁉️", 'comments': 707, 'is_video': False, 'location': None, 'posted_at': 1764960384, 'shortcode': 'DR5HA65ETZQ', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1350}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/591144857_18569396479036669_6331524991528286918_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=101', 'media_count': 18, 'product_type': None, 'tagged_users': [{'id': '3259531369', 'username': 'paymeskrilla', 'full_name': 'Skrilla🦴🐾🦴🐾', 'is_verified': True}, {'id': '7499114046', 'username': 'hurricane.wisdom', 'full_name': 'Wisdom🐢🇳🇬', 'is_verified': True}]}` URL of the 3rd most recent post. Example: `{'id': '3744292296867999545', 'url': 'https://www.instagram.com/p/DP2ZgGCDG85/', 'type': 'GraphVideo', 'likes': 541957, 'views': 3056279, 'caption': 'KODAK BLACK MEDIA DAY EP 1‼️ Full freestyle @ link in bio 🎙️', 'comments': 13675, 'is_video': True, 'location': None, 'posted_at': 1760574556, 'shortcode': 'DP2ZgGCDG85', 'audio_info': {'audio_id': '1525594238568663', 'song_name': 'Original audio', 'artist_name': 'rap', 'uses_original_audio': True}, 'dimensions': {'width': 640, 'height': 1136}, 'display_url': 'https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/566773246_1340921630964055_2651647205854198667_n.jpg?stp=dst-jpg_e15_tt6&_nc_ht=scontent-sea5-1.cdninstagram.com&_nc_cat=107', 'media_count': None, 'product_type': 'clips', 'tagged_users': [{'id': '192197495', 'username': 'kodakblack', 'full_name': 'Bill Russell', 'is_verified': True}]}` URL of the 4th most recent post. Example: `{'id': '3803885781283408912', 'url': 'https://www.instagram.com/p/DTKHfbXjowQ/', 'type': 'GraphSidecar', 'likes': 23457, 'views': None, 'caption': "We got two highly anticipated albums dropping this month‼️💿 Which one are y'all most excited for⁉️🤔 'BULLY' by #Ye OR 'DON'T BE DUMB' by #ASAPRocky Let us know down below‼️👇", 'comments': 413, 'is_video': False, 'location': None, 'posted_at': 1767678543, 'shortcode': 'DTKHfbXjowQ', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/610800578_18575383822036669_370893365218059988_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 3, 'product_type': None, 'tagged_users': None}` URL of the 5th most recent post. Example: `{'id': '3803871417327293855', 'url': 'https://www.instagram.com/p/DTKEOZ5DhWf/', 'type': 'GraphSidecar', 'likes': 46127, 'views': None, 'caption': "#Rakai is now unbanned on Twitch and he celebrated by being uncuffed by the police‼️🚨 Y'all happy to see Rakai back⁉️🤔", 'comments': 290, 'is_video': False, 'location': None, 'posted_at': 1767676830, 'shortcode': 'DTKEOZ5DhWf', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/609252800_18575380657036669_7913948580798256570_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 2, 'product_type': None, 'tagged_users': None}` URL of the 6th most recent post. Example: `{'id': '3803836179947474913', 'url': 'https://www.instagram.com/p/DTJ8NohjE_h/', 'type': 'GraphSidecar', 'likes': 20362, 'views': None, 'caption': 'Mugshots from #ASAPRocky\'s "Punk Rocky" video‼️🎥', 'comments': 96, 'is_video': False, 'location': None, 'posted_at': 1767672630, 'shortcode': 'DTJ8NohjE_h', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611342679_18575373289036669_125946305517673975_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 10, 'product_type': None, 'tagged_users': None}` URL of the 7th most recent post. Example: `{'id': '3803789983816098876', 'url': 'https://www.instagram.com/p/DTJxtZBjCQ8/', 'type': 'GraphSidecar', 'likes': 21184, 'views': None, 'caption': "#Ye has earned over 60 BILLION STREAMS on Spotify‼️🤯 He is now the 4th most streamed rapper of all time on the platform 🔥 What Ye album have y'all streamed the most⁉️🤔 📸: @timmy.ty", 'comments': 197, 'is_video': False, 'location': None, 'posted_at': 1767667123, 'shortcode': 'DTJxtZBjCQ8', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/610712728_18575364046036669_6623987188310692834_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 8, 'product_type': None, 'tagged_users': None}` URL of the 8th most recent post. Example: `{'id': '3803760123928907245', 'url': 'https://www.instagram.com/p/DTJq631lA3t/', 'type': 'GraphSidecar', 'likes': 41045, 'views': None, 'caption': "Lil Durk's murder-for-hire trial has been delayed until the spring. On Monday (Jan. 5), Judge Michael W. Fitzgerald approved a request to continue the trial, which had been set to begin on Jan. 20. The trial for Lil Durk and his five co-defendants is now scheduled to start on May 4, with a pretrial conference set for April 13.", 'comments': 625, 'is_video': False, 'location': None, 'posted_at': 1767663563, 'shortcode': 'DTJq631lA3t', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611616486_18575357614036669_7266703784068993426_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 5, 'product_type': None, 'tagged_users': None}` URL of the 9th most recent post. Example: `{'id': '3803736848142182312', 'url': 'https://www.instagram.com/p/DTJloKklCeo/', 'type': 'GraphSidecar', 'likes': 31972, 'views': None, 'caption': "#KyrieIrving bought #LaRussell's album for $11,000‼️🤯 LaRussell spoke on him waking up and seeing Kyrie's purchase of $11k and he also got a call for Kyrie giving him his flowers🙏 Y'all rockin' with this⁉️🤔", 'comments': 173, 'is_video': False, 'location': None, 'posted_at': 1767660789, 'shortcode': 'DTJloKklCeo', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611249600_18575352745036669_3312886124186420117_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 3, 'product_type': None, 'tagged_users': None}` URL of the 10th most recent post. Example: `{'id': '3803703253754789563', 'url': 'https://www.instagram.com/p/DTJd_TXDT67/', 'type': 'GraphVideo', 'likes': 13415, 'views': 64782, 'caption': '#ASAPRocky dropped his first single from \'DON\'T BE DUMB\' called "Punk Rocky"‼️🔥 Y\'all rockin\' with the visuals⁉️🤔', 'comments': 240, 'is_video': True, 'location': None, 'posted_at': 1767656794, 'shortcode': 'DTJd_TXDT67', 'audio_info': {'audio_id': '728255996960884', 'song_name': 'Punk Rocky', 'artist_name': 'A$AP Rocky', 'uses_original_audio': False}, 'dimensions': {'width': 750, 'height': 1333}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/610835983_18575382973036669_6434301582458044265_n.jpg?stp=dst-jpg_e15_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=101', 'media_count': None, 'product_type': 'clips', 'tagged_users': None}` URL of the 11th most recent post. Example: `{'id': '3803681281365293389', 'url': 'https://www.instagram.com/p/DTJY_j-lLlN/', 'type': 'GraphImage', 'likes': 52009, 'views': None, 'caption': 'A new study shows that women tend to pack almost twice as much as they need, bringing around 60 clothing items for a week-long trip when only about 34 are actually used‼️👀 According to a survey conducted by a travel insurance company, 72% of female travelers admit they overpack. Nearly two-thirds say they struggle to zip their suitcases, and 58% end up going over airline weight limits.', 'comments': 235, 'is_video': False, 'location': None, 'posted_at': 1767654164, 'shortcode': 'DTJY_j-lLlN', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1346}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611208025_18575338294036669_1164335797954634545_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': None, 'product_type': None, 'tagged_users': None}` URL of the 12th most recent post. Example: `{'id': '3803615212940314915', 'url': 'https://www.instagram.com/p/DTJJ-I9lEkj/', 'type': 'GraphSidecar', 'likes': 66770, 'views': None, 'caption': '➡️Swipe to see the inspiration behind A$AP Rocky\'s new single art‼️ Rocky\'s cover art for "Punk Rocky" is seemingly inspired by PaRappa The Rappa, a classic PS1 game. PaRappa the Rapper is a rhythm game in which the main character, PaRappa, must make his way through each of the game\'s six stages by rapping. Rocky parallels the iconic game\'s cover in his new cover art. Y\'all rockin\' with it⁉️', 'comments': 295, 'is_video': False, 'location': None, 'posted_at': 1767646288, 'shortcode': 'DTJJ-I9lEkj', 'audio_info': None, 'dimensions': {'width': 1080, 'height': 1080}, 'display_url': 'https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/612182407_18575318113036669_3435325046338182668_n.jpg?stp=dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1', 'media_count': 2, 'product_type': None, 'tagged_users': None}` Instagram accounts suggested as similar to this profile. Example: `[{'username': 'complexmusic', 'full_name': 'Complex Music'}, {'username': 'xxl', 'full_name': 'XXL'}, {'username': 'rollingloud', 'full_name': 'Rolling Loud'}, {'username': 'nojumper', 'full_name': 'No Jumper 🏀'}, {'username': 'domislivenews', 'full_name': 'DomIsLive NEWS'}, {'username': 'concert', 'full_name': 'Concert'}, {'username': 'liluzivert', 'full_name': 'Lil Uzi Vert'}, {'username': 'rapcaviar', 'full_name': 'RapCaviar'}, {'username': 'liltecca', 'full_name': 'tec'}, {'username': 'rapdirect', 'full_name': 'Rap Direct'}, {'username': 'chieffkeeffsossa', 'full_name': 'Chief Keef'}, {'username': 'asaprocky', 'full_name': 'A$AP ROCKY'}, {'username': 'redbull', 'full_name': 'Red Bull'}, {'username': 'hotnewhiphop', 'full_name': 'HotNewHipHop®'}, {'username': 'champagnepapi', 'full_name': 'champagnepapi'}, {'username': 'akademiks', 'full_name': 'DJ Akademiks'}, {'username': 'spotify', 'full_name': 'Spotify'}, {'username': 'travisscott', 'full_name': 'flame'}, {'username': 'lyricalemonade', 'full_name': 'Lyrical Lemonade'}, {'username': '21savage', 'full_name': ''}, {'username': 'genius', 'full_name': 'Genius'}, {'username': 'rapmusic', 'full_name': 'RapMusic'}, {'username': 'hotfreestyle', 'full_name': 'Hot Freestyle'}, {'username': 'hiphop', 'full_name': 'HipHop'}, {'username': 'dontoliver', 'full_name': 'DON TOLIVER'}]` URL of the 5th most recent IGTV video URL of the 6th most recent IGTV video URL of the 7th most recent IGTV video URL of the 8th most recent IGTV video URL of the 9th most recent IGTV video URL of the 10th most recent IGTV video URL of the 11th most recent IGTV video URL of the 12th most recent IGTV video Email address found on the profile: the business email when listed, otherwise extracted from the bio. Example: `contact@example.com` Average engagement rate: mean likes + comments across the latest posts divided by followers. Example: `0.034` Hashtags extracted from the profile bio text. Example: `['creator', 'music']` Unique hashtags extracted from the captions of the latest posts. Example: `['viral', 'trending', 'fyp']` Bio text with mentions and hashtags pre-tagged as structured entities (type, text, url) Business address listed on the profile, with city and coordinates when available Username of the input profile this row was discovered from (Discovery Mode). Empty for profiles you submitted directly. Example: `mrbeast` Discovery Mode expansion depth: `0` for directly submitted profiles, `1` for their related profiles, `2` for the next level, etc. Example: `1` Additional enrichment functions enabled for this record. Example: `{}` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 31297, "object": "result", "squid": "0048e9be66d3be6e35ca90492af75576", "run": "2b73b1ff538723b20a93bcd77ed1f6fd", "profile_url": "https://www.instagram.com/rap/", "username": "rap", "full_name": "RapTV", "biography": "What's Next in Hip Hop & Culture‼️\n🔋 a @lowbattery brand\n🌐 @bars @concert @drip\n⬇️Purchase RapTV's \"What A Time\" Zine", "profile_pic_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-19/606497536_18573290305036669_6922238950325835238_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=2lxJXKMwDVIQ7kNvwGOIvuK&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_Afobuv01_l-OtINPJ-wg-xxgJlqZyMUEyjk5yy9AZcqefQ&oe=6962A8EB&_nc_sid=8b3546", "profile_id": 1459940668, "fbid": 17841401100062811, "followers_count": 12747786, "follows_count": 1607, "posts_count": 55976, "is_private": false, "is_verified": true, "is_business_account": false, "is_professional_account": true, "joined_recently": false, "category": "Media/news company", "business_email": null, "business_phone_number": null, "business_contact_method": "UNKNOWN", "external_url_1": { "url": "https://linkin.bio/raptv", "title": "", "lynx_url": "https://l.instagram.com/?u=https%3A%2F%2Flinkin.bio%2Fraptv&e=AT1y8V__CJ3AzWE2k-FOtdtu84FoBDS37Q5xu8e2Qwu26y5gfDH6fPjwXDM3yPFOg1_2j4HyXudJsgN_Ss8YZ0ZBXMeMZKkP", "link_type": "external" }, "external_url_2": { "url": "http://whatatimezine.com", "title": "RapTV Zine", "lynx_url": "https://l.instagram.com/?u=http%3A%2F%2Fwhatatimezine.com%2F&e=AT3B5UMx3zD_egGreWtkNTBf8Ns1ylMOeK6w9F3TuIJjOZdXssF9nDM2MpEkBAs6H8FL9ACXPzGtY2mjq5e1lBPPCYmRh3RG", "link_type": "external" }, "external_url_3": { "url": "https://teamwater.org/", "title": "Team Water", "lynx_url": "https://l.instagram.com/?u=https%3A%2F%2Fteamwater.org%2F&e=AT2j42otjhH4ej8VjauY1AwMkA7Enhrkkib8Fi8SqcfWMorigPVsTSohy1Wm6VHBVA684itOmoP6u2O4DTSw0Od7yBj6zz6H", "link_type": "external" }, "all_external_urls": [ { "url": "https://linkin.bio/raptv", "title": "", "lynx_url": "https://l.instagram.com/?u=https%3A%2F%2Flinkin.bio%2Fraptv&e=AT1y8V__CJ3AzWE2k-FOtdtu84FoBDS37Q5xu8e2Qwu26y5gfDH6fPjwXDM3yPFOg1_2j4HyXudJsgN_Ss8YZ0ZBXMeMZKkP", "link_type": "external" }, { "url": "http://whatatimezine.com", "title": "RapTV Zine", "lynx_url": "https://l.instagram.com/?u=http%3A%2F%2Fwhatatimezine.com%2F&e=AT3B5UMx3zD_egGreWtkNTBf8Ns1ylMOeK6w9F3TuIJjOZdXssF9nDM2MpEkBAs6H8FL9ACXPzGtY2mjq5e1lBPPCYmRh3RG", "link_type": "external" }, { "url": "https://teamwater.org/", "title": "Team Water", "lynx_url": "https://l.instagram.com/?u=https%3A%2F%2Fteamwater.org%2F&e=AT2j42otjhH4ej8VjauY1AwMkA7Enhrkkib8Fi8SqcfWMorigPVsTSohy1Wm6VHBVA684itOmoP6u2O4DTSw0Od7yBj6zz6H", "link_type": "external" } ], "highlight_reel_count": 9, "igtv_video_count": 73, "has_channel": false, "has_clips": true, "has_guides": false, "latest_igtv_video_1": { "id": "2990969497965202326", "url": "https://www.instagram.com/reel/CmCDulcPouW/", "likes": 53671, "title": "", "views": 270959, "caption": "#SauceWalka met his biggest fan‼👀 Walka met a fan who he deeply impacted. How do y'all feel about this⁉🤔", "comments": 458, "duration": 87.466, "location": null, "posted_at": 1670771399, "shortcode": "CmCDulcPouW", "thumbnail_url": "https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/319123546_157570383298762_6241505073778244047_n.jpg?stp=c0.135.1080.1080a_dst-jpg_e35_s640x640_sh0.08_tt6&_nc_ht=scontent-sea5-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=lp6CmfKnNQ0Q7kNvwFzF7Db&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfqYcgvDGdlW_F8QBaiI5mFbVF1xX2nWGKMQzvWJC_3tyQ&oe=6962C607&_nc_sid=8b3546" }, "latest_igtv_video_2": { "id": "2893228810109674349", "url": "https://www.instagram.com/reel/Cgm0EYYg2Nt/", "likes": 94409, "title": "", "views": 498586, "caption": "#DJKhaled trying to hit the Mega Millions for the $1 Billion cash prize. Did y'all cop a ticket⁉️ Follow @BARS for behind the scenes content‼️", "comments": 698, "duration": 24.7, "location": null, "posted_at": 1659119853, "shortcode": "Cgm0EYYg2Nt", "thumbnail_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/296164237_591475512329436_3321149571347964908_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=HyQoqdl3TdMQ7kNvwGuat83&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfoHCA3EKBDke63AjLJrvy-vx8d30TB2Coq5jcNOP8o10g&oe=6962AB6D&_nc_sid=8b3546" }, "latest_igtv_video_3": { "id": "2893131765138890716", "url": "https://www.instagram.com/reel/CgmeAMNgJ_c/", "likes": 215238, "title": "", "views": 915592, "caption": "Will Smith just released a 5 minute video addressing him slapping Chris Rock, as well as apologizing to him and his family‼️😳", "comments": 1610, "duration": 50.366, "location": null, "posted_at": 1659108234, "shortcode": "CgmeAMNgJ_c", "thumbnail_url": "https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/296436953_3345570412396450_1515402937347091776_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea5-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=aH7BIxYEE-0Q7kNvwHOWlsc&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_Afp5Oa4gBnJH62Oe4W3grJHD7jWOJQ-Z2Qjq2LRE6LSRcw&oe=6962DDDD&_nc_sid=8b3546" }, "latest_igtv_video_4": { "id": "2892870456929653049", "url": "https://www.instagram.com/reel/Cglilp-g5E5/", "likes": 52183, "title": "", "views": 284444, "caption": "#Drake kicking off his October World Weekend concert. Y'all rockin with it⁉️ Follow @concert for more‼️ 🎥 @complexcanada", "comments": 274, "duration": 56.366, "location": null, "posted_at": 1659077276, "shortcode": "Cglilp-g5E5", "thumbnail_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/295911941_722017562193368_4950961007415968397_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=108&_nc_oc=Q6cZ2QGLXYrAma8EncSqcOiqKIcHKbxVivwPqYwx_xj92YylT2fDFMMKI-V3K1wfaUNhtvQ&_nc_ohc=HDeXsVapBBwQ7kNvwEgm58o&_nc_gid=GbO4qzpMwEDC4wLEu3EOeQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfqhhjUn-99-pPay_mtQ9OZi-JlWz58vJv3tC0OI5KgxuA&oe=6962B740&_nc_sid=8b3546" }, "latest_post_1": { "id": "3781759654318683349", "url": "https://www.instagram.com/p/DR7gl51kbTV/", "type": "GraphSidecar", "likes": 66646, "views": null, "caption": "The #RapTV Power Rankings for November 2025 have been revealed‼️🔥 Click the link in bio to see why these artists made the cut 👀", "comments": 650, "is_video": false, "location": null, "posted_at": 1765040903, "shortcode": "DR7gl51kbTV", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/591164148_18569581537036669_7700805801646043012_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=101", "media_count": 3, "product_type": null, "tagged_users": null }, "latest_post_2": { "id": "3781084211714274896", "url": "https://www.instagram.com/p/DR5HA65ETZQ/", "type": "GraphSidecar", "likes": 44670, "views": null, "caption": "Hit the link in bio to find out more about our Next-Up Class of 2025‼️ Y'all rockin' with any of them already⁉️", "comments": 707, "is_video": false, "location": null, "posted_at": 1764960384, "shortcode": "DR5HA65ETZQ", "audio_info": null, "dimensions": { "width": 1080, "height": 1350 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/591144857_18569396479036669_6331524991528286918_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=101", "media_count": 18, "product_type": null, "tagged_users": [ { "id": "3259531369", "username": "paymeskrilla", "full_name": "Skrilla🦴🐾🦴🐾", "is_verified": true }, { "id": "7499114046", "username": "hurricane.wisdom", "full_name": "Wisdom🐢🇳🇬", "is_verified": true } ] }, "latest_post_3": { "id": "3744292296867999545", "url": "https://www.instagram.com/p/DP2ZgGCDG85/", "type": "GraphVideo", "likes": 541957, "views": 3056279, "caption": "KODAK BLACK MEDIA DAY EP 1‼️ Full freestyle @ link in bio 🎙️", "comments": 13675, "is_video": true, "location": null, "posted_at": 1760574556, "shortcode": "DP2ZgGCDG85", "audio_info": { "audio_id": "1525594238568663", "song_name": "Original audio", "artist_name": "rap", "uses_original_audio": true }, "dimensions": { "width": 640, "height": 1136 }, "display_url": "https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/566773246_1340921630964055_2651647205854198667_n.jpg?stp=dst-jpg_e15_tt6&_nc_ht=scontent-sea5-1.cdninstagram.com&_nc_cat=107", "media_count": null, "product_type": "clips", "tagged_users": [ { "id": "192197495", "username": "kodakblack", "full_name": "Bill Russell", "is_verified": true } ] }, "latest_post_4": { "id": "3803885781283408912", "url": "https://www.instagram.com/p/DTKHfbXjowQ/", "type": "GraphSidecar", "likes": 23457, "views": null, "caption": "We got two highly anticipated albums dropping this month‼️💿 Which one are y'all most excited for⁉️🤔 'BULLY' by #Ye OR 'DON'T BE DUMB' by #ASAPRocky Let us know down below‼️👇", "comments": 413, "is_video": false, "location": null, "posted_at": 1767678543, "shortcode": "DTKHfbXjowQ", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/610800578_18575383822036669_370893365218059988_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 3, "product_type": null, "tagged_users": null }, "latest_post_5": { "id": "3803871417327293855", "url": "https://www.instagram.com/p/DTKEOZ5DhWf/", "type": "GraphSidecar", "likes": 46127, "views": null, "caption": "#Rakai is now unbanned on Twitch and he celebrated by being uncuffed by the police‼️🚨 Y'all happy to see Rakai back⁉️🤔", "comments": 290, "is_video": false, "location": null, "posted_at": 1767676830, "shortcode": "DTKEOZ5DhWf", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/609252800_18575380657036669_7913948580798256570_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 2, "product_type": null, "tagged_users": null }, "latest_post_6": { "id": "3803836179947474913", "url": "https://www.instagram.com/p/DTJ8NohjE_h/", "type": "GraphSidecar", "likes": 20362, "views": null, "caption": "Mugshots from #ASAPRocky's \"Punk Rocky\" video‼️🎥", "comments": 96, "is_video": false, "location": null, "posted_at": 1767672630, "shortcode": "DTJ8NohjE_h", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611342679_18575373289036669_125946305517673975_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 10, "product_type": null, "tagged_users": null }, "latest_post_7": { "id": "3803789983816098876", "url": "https://www.instagram.com/p/DTJxtZBjCQ8/", "type": "GraphSidecar", "likes": 21184, "views": null, "caption": "#Ye has earned over 60 BILLION STREAMS on Spotify‼️🤯 He is now the 4th most streamed rapper of all time on the platform 🔥 What Ye album have y'all streamed the most⁉️🤔 📸: @timmy.ty", "comments": 197, "is_video": false, "location": null, "posted_at": 1767667123, "shortcode": "DTJxtZBjCQ8", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/610712728_18575364046036669_6623987188310692834_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 8, "product_type": null, "tagged_users": null }, "latest_post_8": { "id": "3803760123928907245", "url": "https://www.instagram.com/p/DTJq631lA3t/", "type": "GraphSidecar", "likes": 41045, "views": null, "caption": "Lil Durk's murder-for-hire trial has been delayed until the spring. On Monday (Jan. 5), Judge Michael W. Fitzgerald approved a request to continue the trial, which had been set to begin on Jan. 20. The trial for Lil Durk and his five co-defendants is now scheduled to start on May 4, with a pretrial conference set for April 13.", "comments": 625, "is_video": false, "location": null, "posted_at": 1767663563, "shortcode": "DTJq631lA3t", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611616486_18575357614036669_7266703784068993426_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 5, "product_type": null, "tagged_users": null }, "latest_post_9": { "id": "3803736848142182312", "url": "https://www.instagram.com/p/DTJloKklCeo/", "type": "GraphSidecar", "likes": 31972, "views": null, "caption": "#KyrieIrving bought #LaRussell's album for $11,000‼️🤯 LaRussell spoke on him waking up and seeing Kyrie's purchase of $11k and he also got a call for Kyrie giving him his flowers🙏 Y'all rockin' with this⁉️🤔", "comments": 173, "is_video": false, "location": null, "posted_at": 1767660789, "shortcode": "DTJloKklCeo", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611249600_18575352745036669_3312886124186420117_n.jpg?stp=dst-jpg_e15_fr_p1080x1080_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 3, "product_type": null, "tagged_users": null }, "latest_post_10": { "id": "3803703253754789563", "url": "https://www.instagram.com/p/DTJd_TXDT67/", "type": "GraphVideo", "likes": 13415, "views": 64782, "caption": "#ASAPRocky dropped his first single from 'DON'T BE DUMB' called \"Punk Rocky\"‼️🔥 Y'all rockin' with the visuals⁉️🤔", "comments": 240, "is_video": true, "location": null, "posted_at": 1767656794, "shortcode": "DTJd_TXDT67", "audio_info": { "audio_id": "728255996960884", "song_name": "Punk Rocky", "artist_name": "A$AP Rocky", "uses_original_audio": false }, "dimensions": { "width": 750, "height": 1333 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/610835983_18575382973036669_6434301582458044265_n.jpg?stp=dst-jpg_e15_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=101", "media_count": null, "product_type": "clips", "tagged_users": null }, "latest_post_11": { "id": "3803681281365293389", "url": "https://www.instagram.com/p/DTJY_j-lLlN/", "type": "GraphImage", "likes": 52009, "views": null, "caption": "A new study shows that women tend to pack almost twice as much as they need, bringing around 60 clothing items for a week-long trip when only about 34 are actually used‼️👀 According to a survey conducted by a travel insurance company, 72% of female travelers admit they overpack. Nearly two-thirds say they struggle to zip their suitcases, and 58% end up going over airline weight limits.", "comments": 235, "is_video": false, "location": null, "posted_at": 1767654164, "shortcode": "DTJY_j-lLlN", "audio_info": null, "dimensions": { "width": 1080, "height": 1346 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/611208025_18575338294036669_1164335797954634545_n.jpg?stp=dst-jpg_e35_p1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": null, "product_type": null, "tagged_users": null }, "latest_post_12": { "id": "3803615212940314915", "url": "https://www.instagram.com/p/DTJJ-I9lEkj/", "type": "GraphSidecar", "likes": 66770, "views": null, "caption": "➡️Swipe to see the inspiration behind A$AP Rocky's new single art‼️ Rocky's cover art for \"Punk Rocky\" is seemingly inspired by PaRappa The Rappa, a classic PS1 game. PaRappa the Rapper is a rhythm game in which the main character, PaRappa, must make his way through each of the game's six stages by rapping. Rocky parallels the iconic game's cover in his new cover art. Y'all rockin' with it⁉️", "comments": 295, "is_video": false, "location": null, "posted_at": 1767646288, "shortcode": "DTJJ-I9lEkj", "audio_info": null, "dimensions": { "width": 1080, "height": 1080 }, "display_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/612182407_18575318113036669_3435325046338182668_n.jpg?stp=dst-jpg_e35_s1080x1080_sh0.08_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1", "media_count": 2, "product_type": null, "tagged_users": null }, "related_profiles": [ { "id": "24164178", "username": "complexmusic", "full_name": "Complex Music", "is_private": false, "is_verified": true, "profile_pic_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-19/458251094_1219124509241820_8098616880837981487_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QG&_nc_ohc=x&oh=00&oe=6962A8EB&_nc_sid=8b3546" }, { "id": "9165072", "username": "xxl", "full_name": "XXL", "is_private": false, "is_verified": true, "profile_pic_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-19/447619133_1152586032425394_1136398907624324613_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QG&_nc_ohc=x&oh=00&oe=6962A8EB&_nc_sid=8b3546" }, { "id": "1454869140", "username": "rollingloud", "full_name": "Rolling Loud", "is_private": false, "is_verified": true, "profile_pic_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-19/462520417_1207677690461544_5822097494037038823_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QG&_nc_ohc=x&oh=00&oe=6962A8EB&_nc_sid=8b3546" }, { "id": "1288319767", "username": "nojumper", "full_name": "No Jumper 🏀", "is_private": false, "is_verified": true, "profile_pic_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-19/438159727_780985250595958_7902879122942327355_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2QG&_nc_ohc=x&oh=00&oe=6962A8EB&_nc_sid=8b3546" } ], "latest_igtv_video_5": { "id": "2892870456929653049", "url": "https://www.instagram.com/reel/Cglilp-g5E9/", "likes": 48211, "title": "", "views": 261034, "caption": "#Rap moments that defined the culture this year‼️", "comments": 233, "duration": 44.3, "location": null, "posted_at": 1658977276, "shortcode": "Cglilp-g5E9", "thumbnail_url": "https://scontent-sea1-1.cdninstagram.com/v/t51.2885-15/295911941_722017562193368_4950961007415968397_n.jpg?stp=c0.89.720.720a_dst-jpg_e15_s640x640_tt6&_nc_ht=scontent-sea1-1.cdninstagram.com&_nc_cat=108" }, "latest_igtv_video_6": null, "latest_igtv_video_7": null, "latest_igtv_video_8": null, "latest_igtv_video_9": null, "latest_igtv_video_10": null, "latest_igtv_video_11": null, "latest_igtv_video_12": null, "email_address": "michelle@nowfluence.co", "avg_engagement": 0.005141, "bio_hashtags": [ "ghostlifestyle" ], "post_hashtags": [ "RapTV", "Ye", "ASAPRocky", "Rakai", "KyrieIrving", "LaRussell" ], "biography_with_entities": { "raw_text": "rebel against the status quo\n#ghostlifestyle\n@ghostenergy \n@ghosthydration \n@ghostlifestyleapparel \n@ghostgamer \n@ghostwellness", "entities": [ { "user": null, "hashtag": { "name": "ghostlifestyle" } }, { "user": { "username": "ghostenergy" }, "hashtag": null } ] }, "business_address": { "city_name": "New York, New York", "city_id": 108424279189115, "latitude": 40.7142, "longitude": -74.0064, "street_address": null, "zip_code": null }, "discovered_from": null, "hop_depth": 0, "functions": null, "native_id": 31297 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/instagram-profile-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Instagram Profile Scraper settings Configure your Instagram Profile Scraper squid settings. Control the maximum number of profiles collected per task and across the entire run. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of profiles to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum number of unique results retrieved across all tasks in the entire run | | **discovery\_mode** | boolean | false | Expand from your input profiles: after scraping each profile, the crawler also scrapes its `related_profiles`. Use `hop_depth` and `discovered_from` in results to trace the expansion path | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Leave limits empty or null for unlimited collection. Use `max_unique_results_per_run` to set a hard cap on total profiles when processing large batches. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Instagram Profile Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 100, "max_unique_results_per_run": 1000 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings payload = { "name": "Instagram Profile Scraper (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 100, # Max profiles per task "max_unique_results_per_run": 1000 # Total unique profiles limit } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Instagram Profile Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 100, "max_unique_results_per_run": 1000 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/instagram-reels-scraper/add-tasks POST https://api.lobstr.io/v2/squid/{squid_id}/task Add Instagram reel URLs or profile URLs to scrape reels using the lobstr.io API Add Instagram URLs as tasks to your squid. You can provide either a direct reel URL to scrape a specific reel, or a profile URL to collect all reels from that profile. Crawler ID: `4aad3ef0de6a5cea65b48dd575531a8c` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Supported URL Formats **Direct Reel URL:** `https://www.instagram.com/reel/ABC123xyz/` **Profile URL (collects all reels from profile):** `https://www.instagram.com/username/` **Post URL:** `https://www.instagram.com/p/ABC123xyz/` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Instagram Reel URL or Profile URL. If a profile URL is given, the scraper will collect reels from that profile. | Use profile URLs to bulk collect all reels from a creator's account in one task. When scraping a profile, use `max_results` setting to limit how many reels are collected per profile. Both `instagram.com` and `www.instagram.com` URL formats are supported. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.instagram.com/leomessi/" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "url": "https://www.instagram.com/leomessi/" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123def456", "status": "pending", "created_at": "2025-01-15T10:30:00Z", "url": "https://www.instagram.com/leomessi/" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/instagram-reels-scraper/credit-cost Credit cost for the Instagram Reels Scraper 1 credit per reel. # Get Results Source: https://docs.lobstr.io/examples/instagram-reels-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Instagram Reels Scraper Retrieve scraped data from your **Instagram Reels Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the Instagram reel. Example: `3650696636256953349` Shortcode used in the reel URL (e.g. instagram.com/reel/\[shortcode]). Example: `DKp4T-azyQF` Direct URL to the Instagram reel. Example: `https://www.instagram.com/reel/DKp4T-azyQF/` Instagram username of the reel author. Example: `mia_momsy` Display name of the reel author on Instagram. Example: `Mia B` Unique Instagram identifier of the reel author. Example: `63666136412` Number of likes the reel received. Example: `12760` Number of comments on the reel. Example: `84` Total number of views the reel has accumulated. Example: `358030` List of hashtags used in the reel caption. Example: `MacaroozMoments, PicnicWithMyMini, SweetestBond, macarooz, costco, mommyandme, macpops, sweet, decoration, picnic, picnicideas` Instagram accounts mentioned in the reel caption. Example: `macarooz` Instagram users tagged in the reel. Example: `[{'id': '1312299431', 'username': 'macarooz', 'full_name': 'Macarooz®', 'is_verified': True, 'profile_pic_url': 'https://scontent-sea5-1.cdninstagram.com/v/t51.2885-19/206341770_571610920891491_4020524377560378841_n.jpg'}]` Instagram product type (e.g. CLIPS). Example: `clips` Unix timestamp of when the reel was published. Example: `2025-06-08T19:12:15+00:00` Caption text of the reel. Example: \`Sunshine, snuggles & yellow mac pops 💛🍋 A little mommy & me picnic never looked so sweet @macarooz mac pops are at COSTCO now! Go grab yours! 💕 \#MacaroozMoments #PicnicWithMyMini #SweetestBond #macarooz #costco #mommyandme #macpops #sweet #decoration #picnic #picnicideas\` Direct URL to the reel video file. Example: `https://scontent-sea5-1.cdninstagram.com/o1/v/t2/f2/m367/AQMmxqutkTZA2QUIaPBLi68o1kI6GUiSzPRdvqQsEQDQKm5j12ie-8Xrtq4R-BjuabXoN7scoeVCtMThpD0vOJR_vNNXyRhPy4kOjQ8.mp4` URL of the reel's cover or thumbnail image. Example: `https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/503516494_17911972110120413_6769091293526442063_n.jpg` Duration of the reel video in seconds. Example: `29` Details of the music track used in the reel. Example: `{'audio_id': '2048642388993989', 'song_name': 'Original audio', 'artist_name': 'mia_momsy', 'is_explicit': False, 'is_trending': False, 'should_mute_audio': False, 'uses_original_audio': True, 'should_mute_audio_reason': ''}` Internal identifier for the location tagged in the reel. Example: `212983635` Name of the location tagged in the reel. Example: `San Diego, California` Whether the reel is marked as a sponsored post. Example: `false` Whether the reel is pinned to the top of the author's Instagram profile. Example: `false` Whether comments are disabled on the reel. Example: `false` Whether like and view counts are hidden on the reel. Example: `false` Whether the current viewer is allowed to reshare the reel. Example: `true` Instagram accounts listed as co-authors of the reel. Example: `['macarooz']` Width and height of the reel video in pixels. Example: `1080x1920` Additional enrichment functions enabled for this record. Example: `{}` Text content of the 1st comment on the reel. Example: `{'text': "It looks very delicious, and the fact that it's gluten-free is great. Wishing you a fun time 😍", 'user': 'dygu.ylldrm', 'replies_count': 1}` Text content of the 2nd comment on the reel. Example: `{'text': 'This is absolutely adorable! The sunshine, those sweet snuggles, and the mac pops — total picnic goals!😍', 'user': 'daisy.diarys', 'replies_count': 1}` Text content of the 3rd comment on the reel. Example: `{'text': '🍰🥂 Totally adding them to my summer bucket list', 'user': 'chloecollabs', 'replies_count': 1}` Text content of the 4th comment on the reel. Example: `{'text': 'In every costco😮😍😍 I will try on my next shopping🙌', 'user': 'ugc_nazz', 'replies_count': 0}` Text content of the 5th comment on the reel. Example: `{'text': "Ohh, these are my son's absolute favorites enjoy! They look so delicious!😍😍😍", 'user': 'lifestylegizem', 'replies_count': 1}` Text content of the 6th comment on the reel. Example: `{'text': 'Okay but why does this look like the softest cake ever?! 😍', 'user': 'cansuchloe', 'replies_count': 1}` Text content of the 7th comment on the reel. Example: `{'text': 'Looks great outdoors 🙌 I want to try it right away 😍😍', 'user': 'kadriyekacagan', 'replies_count': 1}` Text content of the 8th comment on the reel. Example: `{'text': 'So adorable!!', 'user': 'theglutenfreetravelers', 'replies_count': 1}` Text content of the 9th comment on the reel. Example: `{'text': "I haven't try it before. Absolutely perfect 👏", 'user': 'es_erensenar', 'replies_count': 1}` Text content of the 10th comment on the reel. Example: `{'text': 'Wow the atmosphere is amazing ❤️ I love Mac pop, I will definitely try it 🥰❤️', 'user': 'amerikadabirturkanne', 'replies_count': 1}` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 86888, "object": "result", "squid": "8f0b702690c26f81f50196a62366913d", "run": "fb04953c7a87fe349cfc7a254c6ec77d", "reel_id": "3650696636256953349", "shortcode": "DKp4T-azyQF", "reel_url": "https://www.instagram.com/reel/DKp4T-azyQF/", "owner_username": "mia_momsy", "owner_full_name": "Mia B", "owner_id": "63666136412", "likes_count": 12760, "comments_count": 84, "views_count": 358030, "hashtags": "MacaroozMoments, PicnicWithMyMini, SweetestBond, macarooz, costco, mommyandme, macpops, sweet, decoration, picnic, picnicideas", "mentions": "macarooz", "tagged_users": [ { "id": "1312299431", "username": "macarooz", "full_name": "Macarooz®", "is_verified": true, "profile_pic_url": "https://scontent-sea5-1.cdninstagram.com/v/t51.2885-19/206341770_571610920891491_4020524377560378841_n.jpg" } ], "product_type": "clips", "timestamp": "2025-06-08T19:12:15+00:00", "caption": "Sunshine, snuggles & yellow mac pops 💛🍋 A little mommy & me picnic never looked so sweet\n\n@macarooz mac pops are at COSTCO now! Go grab yours! 💕\n\n#MacaroozMoments #PicnicWithMyMini #SweetestBond #macarooz #costco #mommyandme #macpops #sweet #decoration #picnic #picnicideas", "video_url": "https://scontent-sea5-1.cdninstagram.com/o1/v/t2/f2/m367/AQMmxqutkTZA2QUIaPBLi68o1kI6GUiSzPRdvqQsEQDQKm5j12ie-8Xrtq4R-BjuabXoN7scoeVCtMThpD0vOJR_vNNXyRhPy4kOjQ8.mp4", "display_url": "https://scontent-sea5-1.cdninstagram.com/v/t51.2885-15/503516494_17911972110120413_6769091293526442063_n.jpg", "video_duration_seconds": 29, "music_info": { "audio_id": "2048642388993989", "song_name": "Original audio", "artist_name": "mia_momsy", "is_explicit": false, "is_trending": false, "should_mute_audio": false, "uses_original_audio": true, "should_mute_audio_reason": "" }, "location_id": "212983635", "location_name": "San Diego, California", "is_sponsored": false, "is_pinned": false, "comments_disabled": false, "like_and_view_counts_disabled": false, "can_viewer_reshare": true, "co_authors": [ "macarooz" ], "media_dimensions": "1080x1920", "functions": null, "comment1": { "text": "It looks very delicious, and the fact that it's gluten-free is great. Wishing you a fun time 😍", "user": "dygu.ylldrm", "replies_count": 1 }, "comment2": { "text": "This is absolutely adorable! The sunshine, those sweet snuggles, and the mac pops — total picnic goals!😍", "user": "daisy.diarys", "replies_count": 1 }, "comment3": { "text": "🍰🥂 Totally adding them to my summer bucket list", "user": "chloecollabs", "replies_count": 1 }, "comment4": { "text": "In every costco😮😍😍 I will try on my next shopping🙌", "user": "ugc_nazz", "replies_count": 0 }, "comment5": { "text": "Ohh, these are my son's absolute favorites enjoy! They look so delicious!😍😍😍", "user": "lifestylegizem", "replies_count": 1 }, "comment6": { "text": "Okay but why does this look like the softest cake ever?! 😍", "user": "cansuchloe", "replies_count": 1 }, "comment7": { "text": "Looks great outdoors 🙌 I want to try it right away 😍😍", "user": "kadriyekacagan", "replies_count": 1 }, "comment8": { "text": "So adorable!!", "user": "theglutenfreetravelers", "replies_count": 1 }, "comment9": { "text": "I haven't try it before. Absolutely perfect 👏", "user": "es_erensenar", "replies_count": 1 }, "comment10": { "text": "Wow the atmosphere is amazing ❤️ I love Mac pop, I will definitely try it 🥰❤️", "user": "amerikadabirturkanne", "replies_count": 1 }, "native_id": 86888 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/instagram-reels-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Instagram Reels Scraper settings including result limits Configure your Instagram Reels Scraper squid settings. Control the maximum number of reels collected per task and across the entire run. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of reels to collect per task (profile) | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum number of unique results retrieved across all tasks in the entire run | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **skip\_pinned\_reels** | boolean | false | If enabled, pinned reels will be excluded from the results | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Understanding Limits **max\_results**: Limits reels collected from each profile URL. Useful when scraping multiple creator profiles. **max\_unique\_results\_per\_run**: Global limit across all tasks. The scraper stops once this total is reached, regardless of individual task limits. Set `max_results` to 50-100 when scraping multiple profiles to get a representative sample from each. Leave limits empty or null for unlimited collection. Large profiles can have thousands of reels. Set appropriate limits to control costs and processing time. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Instagram Reels Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 50, "max_unique_results_per_run": 500, "fetch_since": "7d", "skip_pinned_reels": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings payload = { "name": "Instagram Reels Scraper (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 50, "max_unique_results_per_run": 500, "fetch_since": "7d", "skip_pinned_reels": False } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Instagram Reels Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 50, "max_unique_results_per_run": 500, "fetch_since": "7d", "skip_pinned_reels": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/lacentrale-cars-scraper/add-tasks POST https://api.lobstr.io/v2/squid/{squid_id}/task Add LaCentrale search URLs to scrape vehicle listings using the lobstr.io API Add LaCentrale search or listing URLs as tasks to your squid. The scraper will extract all vehicle listings matching your search criteria from the French automotive marketplace. Crawler ID: `665c260fd9139121a4530d23b35b26db` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## URL Format Use LaCentrale listing URLs with your desired search filters: `https://www.lacentrale.fr/listing?yearMin=2025` `https://www.lacentrale.fr/listing?makesModelsCommercialNames=PEUGEOT` Build your search on lacentrale.fr with filters (make, model, year, price, etc.) and copy the URL. ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | LaCentrale search or category URL | Apply filters on lacentrale.fr (make, model, year, price range, location) to target specific vehicle segments. LaCentrale limits search results to 347 pages maximum per URL. Use multiple filtered searches for comprehensive coverage. Use the `fetch_since` setting to only scrape recently added listings for monitoring new inventory. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.lacentrale.fr/listing?yearMin=2024&makesModelsCommercialNames=PEUGEOT" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "url": "https://www.lacentrale.fr/listing?yearMin=2024&makesModelsCommercialNames=PEUGEOT" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123def456", "status": "pending", "created_at": "2025-01-15T10:30:00Z", "url": "https://www.lacentrale.fr/listing?yearMin=2024&makesModelsCommercialNames=PEUGEOT" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/lacentrale-cars-scraper/credit-cost Credit cost for the LaCentrale Cars Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Cars | 1 | 1 credit per car. | | Get Listing Details | 4 | 4 credit per listing. | # Get Results Source: https://docs.lobstr.io/examples/lacentrale-cars-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from LaCentrale Cars Scraper Retrieve scraped data from your **LaCentrale Cars Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Reference identifier. Example: `E118586883` Listing URL. Example: `https://www.lacentrale.fr/auto-occasion-annonce-69118586883.html` Price. Example: `154990.0` Teaser financing price Photo URL. Example: `https://image-annonce.lacentrale.fr/1096x829/E118586883_STANDARD_0.jpg` Mobile photo URLs. Example: `['https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_0.jpg?format=webp&size=285x214&watermark=lc&signature=639071adacd9528c215e8872ccb22969a1a7e6ac2b3a853bb4d2d935', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_1.jpg?format=webp&size=140x105&watermark=lc&signature=a7aec3d26decefda5cf888170c580e86bd6bcca67f2d779a39eddf4d', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_2.jpg?format=webp&size=140x105&watermark=lc&signature=a7aec3d26decefda5cf888170c580e86bd6bcca67f2d779a39eddf4d']` Number of pictures. Example: `17` Date of picture count update. Example: `2026-03-21T14:56:09` Vehicle make or brand. Example: `PORSCHE` Vehicle model. Example: `911` Detailed model name. Example: `PORSCHE 911 TYPE 992` Commercial name. Example: `911 TYPE 992` Vehicle version or trim. Example: `(992) COUPE 3.0 385 CARRERA BVA7` Trim level. Example: `CARRERA` Engine or motorization type. Example: `3.0 385` Vehicle year. Example: `2024` Vehicle mileage. Example: `10930` Energy or fuel type. Example: `ESSENCE` Gearbox type. Example: `AUTO` Number of doors. Example: `2` Category. Example: `COUPE` Vehicle family or range. Example: `AUTO` Exterior colour. Example: `gris` Customer type. Example: `PRO` Customer reference. Example: `C060750` Customer family code. Example: `INTERMEDIAIRE` Contact person name. Example: `MOTORSPORT BY TB` Displayed phone number. Example: `33451127621` Country. Example: `FR` Place visited. Example: `06` Distance in kilometres Whether delivery is available. Example: `true` Available delivery price options. Example: `[0, 100, 200, 300, 500]` Whether item can be delivered. Example: `false` Delivery price Whether item is new. Example: `true` 360° exterior photos. Example: `false` Photosphere images. Example: `false` All photo URLs. Example: `['https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_0.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_1.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_10.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_11.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_2.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_3.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_12.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_4.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_9.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_5.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_6.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_7.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_13.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_8.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_14.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_15.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb', 'https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_16.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb']` Vehicle history check status. Example: `false` Whether listing has a good deal badge. Example: `BAD_DEAL` Manufacturer warranty duration. Example: `1` Publication display options. Example: `['CALLTRACKING', 'PHOTO_360', 'PHOTO_LISTING', 'PHOTO_WEB', 'WEB_IMMEDIAT', 'DELIVERY', 'STRENGTHS', 'MULTI_PHOTOS']` Date first listed online. Example: `2026-03-20T23:00:00+00:00` Last update date. Example: `2026-03-22T11:01:13` Listing quality or relevance score on La Centrale. Example: `639.93634` Request date. Example: `2026-03-23T05:43:55.979536+00:00` List of equipment. Example: `['Volant cuir', 'Antipatinage', 'Ordinateur de bord', 'Alarme', 'ABS', 'Bluetooth', 'Régulateur de vitesse', '4 roues directrices', 'Aide parking', 'Airbag frontal', 'Anti démarrage', 'ASR', 'Becquet', 'Caméra de recul', "Carnet d'entretien", 'Carte main libre', 'Climatisation automatique', 'Climatisation automatique multi zone', 'Contrôle de pression des pneus', 'Détecteur de pluie', 'Différentiel autobloquant', 'Direction assistée', 'FAP', 'Fermeture électrique', 'Frein de parking automatique', 'Jantes alu', 'Non fumeur', 'Pack cuir', 'Pack sport', 'Peinture métallisée', 'Prise audio USB', 'Projecteurs bi-xénon', 'Projecteurs xénon', 'Sièges électriques', 'Suspension sport', 'Système audio BOSE', 'Système audio MP3', 'Système Start & Stop', 'Vitres électriques', 'Pack accent noir(e)', 'Siège chauffant av', '6 litre(s) 390 kw turbo catalyseur', 'Pavillon carbone', 'Rétroviseur ext noir(e) peint', 'Sellerie : cuir partiel', 'Lunette ar. chauffant(e)/dégivrant(e)', 'Système audio porsche cdr avec ecran tactile couleur (radio/lecteur cd)', 'Equipement int. enjoliveur façade de commande carbone', 'Cadran couleur', 'Pack suppl. intérieur: ar. cuir', 'Volant de direction (sport 3 branches)', 'Levier de sélection et poignée de frein à main alcantara', '6 litre(s) 254 kw catalyseur', 'Sticker / bandes décoratives numéro de course', 'Suppression sièges ar', 'Restylage fb (option interne)', 'Vitrage teinté(e)', 'Voie élargie sur train ar', 'Système de pédales et repose pied en aluminium', 'Habillages de bas de caisse peint', 'capote électrique', 'avec monogramme individual', 'Mode de transmission traction intégrale permanente', 'Equipement int. enjoliveur façade de commande peint', 'Étriers de frein jaune peint', '8 litre(s) 478 kw turbo catalyseur', 'Equipement int. enjoliveur façade de commande cuir', 'Support à boissons embout cuir', "Combiné d'instruments avec fond argent", 'Chassis/suspensions surbaissé(e)', 'Arceau de sécurité noir(e)', "Déflecteur d'air électrique", 'Monogramme porsche peint', '0 litre(s) 368 kw catalyseur', 'Spoiler av. couleur caisse', 'Boîte de vitesses 6 rapports sport', 'Pack intérieur coutures dans une couleur différente', 'Cadran compte tours', 'Essuie vitres avec capteur de pluie', 'Monte charge train av', 'sport chrono chronomètre', 'Volant de direction (sport/cuir', 'Rétroviseur ext rabattable électriquement', "Système d'airbag crânien (airbag curtain)", 'Volant de direction chauffant(e)/dégivrant(e) (gt sport / race tex) avec multifonctions et palettes changement vitesse', 'Garniture de pavillon race tex', 'Pré équipement vehicle tracking system', 'Sièges sport av', 'recouvrements cuir', '6 litre(s) 305 kw catalyseur', 'Norme de dépollution euro 6d temp', 'Volant de direction (cuir 3 branches) avec palettes changement vitesse', '8 litre(s) 368 kw turbo catalyseur', 'Volant de direction chauffant(e)/dégivrant(e) (gt sport / cuir) avec multifonctions et palettes changement vitesse', 'Ceintures de sécurité couleur', 'Système audio porsche cdr 24 (radio/lecteur cd)', 'filtre à pollen', '6 litre(s) 340 kw turbo catalyseur', 'embout noir(e)', 'Supports isofix pour siège enfant sur siège ar', 'décor peint', 'Adaptatif sièges sport compr. réglage de siège 18 directions et pack memoire', 'Rétroviseur int cuir', 'Interface universelle audio', 'Console centrale ar cuir', 'Porsche stability management (psm)', '6 litre(s) 355 kw turbo catalyseur', 'Déflecteur spoiler av. couleur caisse', "appuis d'aile noir(e)", '3 branches) avec multifonctions', 'Siège av gauche et rétroviseur ext avec fonction mémoire (mémoire conducteur)', "Système d'assistance de conduite: assistant maintien de trajectoire", 'clignotants LED', 'Equipement int. cuir / sport tex', 'Monogramme série peint', 'Volant de direction chauffant(e)/dégivrant(e) (microfibre race tex) avec multifonctions', 'Moyeu volant de direction et levier de sélection cuir lisse', '8 litre(s) 300 kw catalyseur', 'Chassis/suspensions pour sport automobile réglable', 'Clés véhicule couleur caisse peint compr. étui cuir', "Miroir de courtoisie à l'ar éclairé(e)", 'Levier de sélection aluminium', 'Protecteurs de bas de marche noir(e)', '0 litre(s) 331 kw catalyseur', 'Construction allégée et insonorisant vitrage', 'Equipement int. cuir / race tex', 'Monogramme 911 couleurs chrome', 'lamelles cuir', 'Étriers de frein noir(e) anodisé', 'Volant de direction (alcantara 3 branches) avec palettes changement vitesse', 'Dispositif de freinage céramique (porsche ceramic composite brake', '8 litre(s) 320 kw catalyseur', 'Jantes alliage léger (argent', '0 litre(s) 353 kw turbo catalyseur', 'Pack sport chrono avec porsche design subsecond montre', 'Pack suppl. intérieur: panneau de porte cuir', 'Sièges sport dossiers cuir', 'Mode de transmission transmission intégrale', 'pccb)', 'Moyeu volant de direction cuir', 'Targa', '8 litre(s) 261 kw catalyseur', 'Volant de direction chauffant(e)/dégivrant(e) (cuir) avec multifonctions', 'Gt3 rs', "Éclairage ambiant orienté vers l'arrière", "Système d'airbag crânien porsche side impact protection system (posip)", '7 litre(s) 405 kw turbo catalyseur', 'Gt2 rs', 'Projecteur principal led compr. porsche dynamic light système (pdls)', 'compr. porsche dynamic light système plus (pdls+)', '8 litre(s) 294 kw catalyseur', 'Pack design sport noir(e)', "Système d'assistance de conduite: système d'aide au stationnement av et ar compr. caméra aide au recul et surround view", '6 litre(s) 471 kw)', 'Aile av carbone couleur caisse', 'Garniture de pavillon alcantara', 'Étriers de frein noir(e) (brillant)', "Régulateur du couple d'inertie du moteur (msr)", 'Sièges baquet av', '0 litre(s) 309 kw catalyseur', 'Arceaux targa platinum éclat soyeux', 'Moteur 3', 'Surtapis avec bordure cuir', 'Rétroviseur ext cache de rétroviseur peint', 'Aéro kit turbo', 'Protection volumétrique (système infrarouge)', 'Arceau de sécurité / cage', 'Système de freinage renforcé(e)', 'Volant de direction (gt sport cuir) avec palettes changement vitesse', 'Colonne de direction (volant de direction) réglable(s)', "Déflecteur d'air lat sideblade carbone", 'Direction assistée à commande électronique (servotronic)', 'Garniture de pavillon tissu', 'Appuie têtes av avec porsche', 'Carrosserie: 2 portes', 'Hybride 398 kw (moteur 3', 'Moteur électrique 41 kw (transmission hybride)', 'Pack touring', 'embout inox', '8 litre(s) 446 kw turbo catalyseur', 'couvercle compartiment/vide poches cuir avec monogramme spécifique et coutures couleur contrastante', 'Protecteurs de bas de marche (carbone) éclairé(e)', "Système d'assistance de conduite: assistance au démarrage en côte (hill holder)", 'Porsche active suspension management (pasm)', '0 litre(s) 290 kw turbo catalyseur', 'Cde vocale pour pcm', 'Chassis/suspension sport surbaissé(e) (20 mm)', 'Étoiles de jantes peint (de couleur différente)', 'Bouchon de réservoir finition/aspect alu', 'Embout sortie de ceinture pied milieu cuir', 'Pack intérieur: bois', '8 litre(s) 390 kw turbo catalyseur', 'Rétroviseur ext couverture carbone (sport design)', 'Éclairage diurne led 4 points', "Cadre/encadrement combiné d'instruments finition/aspect alu", 'Enjoliveurs de vitre aluminium', 'Pack suppl. intérieur: façade de commande et panneau de porte cuir', '6 litre(s) 357 kw)', 'Equipement int. cuir alcantara', 'Moteur 4', 'Spoiler ar. couleur caisse', 'Protecteurs de bas de marche (aluminium dark silver) éclairé(e)', 'Levier de sélection des rapports enjoliveur finition/aspect alu', "Eclaireur de plancher à l'ar", "Cadre/encadrement combiné d'instruments cuir", 'Ceinture de sécurité à 6 points coté passager', 'Monogramme 911 noir(e)', 'Volant de direction (gt sport / race tex) avec multifonctions et palettes changement vitesse', 'Volant de direction avec palettes changement vitesse (vareq suppl. pour volant de direction)', 'cache peint', 'Projecteur principal led compr. porsche dynamic light système plus (pdls+)', 'compte tours', 'Colonne de direction (volant de direction) à réglages électriques', 'Pare soleil avec miroir(s) (éclairé(e))', 'Equipement int. cuir brillant', 'Sticker / bandes décoratives lat', 'E gaz', 'Kit de réparation des pneumatiques', 'métallisé peint)', 'Sièges sport plus dossiers cuir avec dans une couleur différente coutures', '0 litre(s) 386 kw catalyseur', 'Réception radio digital(e) (dab+)', 'Airbag lat av', 'Sièges baquet sport av', 'Siège baquet av gauche', 'décor cuir', 'Volant de direction (gt sport alcantara / race tex) avec palettes changement vitesse', 'brossé)', 'coutures en couleur contrastante argent)', 'Projecteurs bi xénon compr. porsche dynamic light système (pdls)', 'Sièges baquets allégés av', 'Projecteurs légers', 'coutures dans/en/au couleur contrastante)', 'Protecteurs de bas de marche (inox) éclairé(e)', 'Jantes alliage léger (métallisé peint)', 'Sellerie : alcantara / simili cuir', "Grille d'entrée d'air peint", 'éclairé(e) (aluminium noir(e)', 'Boîte de vitesses 7 rapports boîte automatique à double embrayage (pdk)', 'Feux de brouillard ar', 'Sound package plus', 'Norme de dépollution euro 6e', 'Pack suppl. intérieur: façade de commande cuir', '0 litre(s) 383 kw catalyseur', 'Éclairage directionnel', 'de couleur différente', 'Moyeu volant de direction avec coutures de couleur différente (de couleur différente)', '6 litre(s) 331 kw turbo catalyseur', 'Rétroviseur ext peint', 'Enjoliveurs de vitre noir(e) (brillant)', 'Essuie vitre ar.', '8 litre(s) 383 kw turbo catalyseur', 'Volant de direction (cuir lisse/sport', 'Pack clubsport', 'Sièges ar (2 places assises) dossiers ar rabattable', 'Airbag tête epaules av (thoraxbag)', 'Direction assistée plus (asservie à la vitesse)', '8 litre(s) 412 kw turbo catalyseur', 'Batterie légère (lithium ion)', '6 litre(s) 456 kw turbo catalyseur', 'étendu sellerie cuir', "Ionisateur d'air", 'embout av carbone', 'Rétroviseur ext à réglage électrique et dégivrant', 'Repose pied finition/aspect sport', 'compr. porsche dynamic light système (pdls)', 'Levier de sélection cuir', 'Pack intérieur: cuir', 'padm)', 'Dossier ar deux parties', 'Siège av gauche à réglages électriques (avec memory)', 'Panneau de porte construction allégée', 'Sport touche', 'matelassé(e) (vareq suppl. vers volant de direction)', 'Mode de transmission roues ar motrices', "Pot d'échappement sport", 'Porsche torque vectoring (ptv)', 'Rétroviseur ext à réglages électriques', 'Automatique freins différentiel (abd)', 'Moyeux caches porsche couleur', 'Rétroviseur ext partie inférieure peint (sport design)', 'Pare brise avec antenne', '0 litre(s) 283 kw turbo catalyseur', 'Equipement int. cuir nature', 'Porsche torque vectoring plus (ptv plus)', 'Pack memory conducteur', 'Embout sport finition/aspect 4 embouts', '3. feu stop', 'Habillages de bas de caisse couleur caisse design sport', 'Equipement int. microfibre race tex', '0 litre(s) 272 kw catalyseur', 'surteinté', 'Sièges sport plus dossiers peint', 'Dossier ar fractionné (40:20:40)', '6 litre(s) 353 kw turbo catalyseur', 'Habillage de colonne de direction cuir avec dans une couleur différente coutures', 'Lave phares (lave projecteurs)', 'Arceaux targa noir(e)', 'Pare soleil race tex', 'Couvercle boite à fusibles cuir', 'Commande de capote manuel(le)', 'Chargeur à induction pour smartphone (charge sans fil)', 'Hardtop (cabriolet)', '4 litre(s) 257 kw catalyseur', "Equipement int. diffuseurs d'air cuir", 'Pare brise avec bandeau pare soleil supérieur(e)', 'Porsche design subsecond montre', 'Dynamique support moteur (porsche active drivetrain mount', 'Siège baquet av droit', 'Equipement int. équipement de série / race tex', 'Porsche management de traction (ptm)', 'Sellerie : cuir / alcantara', 'feux à LED', 'Pack éclairage int / pack design lumière', 'Blocage transversal essieu ar mécanique', 'Pré équipement téléphone/téléphone mobile avec interface bluetooth', 'Rétroviseur ext partie inférieure couleur caisse et pied de rétroviseur noir(e) (finition brillante) peint', 'Boîte de vitesses 7 rapports sport boîte automatique à double embrayage (pdk)', 'Porsche communications management (pcm) compr. online module de navigation', 'Supports isofix pour siège enfant sur siège passager', '8 litre(s) 316 kw catalyseur', 'Vehicle tracking system (pvts)', 'Allumage automatique pour feux de croisement', 'lamelles finition/aspect alu', '6 litre(s) 280 kw catalyseur', 'Habillage de bas de caisse int. cuir', 'Habillage av. sport design', 'Partie inf ar sport design peint (noir(e))', '6 litre(s) 239 kw catalyseur', 'Pare soleil cuir', 'tons cuir de série', "système d'appel d'urgence", 'Gt3 cup', '2 directions)', 'Pack sport léger', 'Jantes alliage léger (gris', '4 directions)', '0 litre(s) 375 kw catalyseur', 'Sièges sport électrique (14 directions) compr. pack memoire', 'Afficheur multifonctions / ordinateur de bord', 'Services online mobile android auto', 'Dispositif antivol pour roues (écrous antivol)', 'Phares à matrice de led compr. porsche dynamic light système plus (pdls+)', 'Appuie têtes av et ar avec porsche', 'Attaché case cuir', 'Levier de sélection alcantara / race tex', 'Éclairage ambiant garniture de pavillon', 'Pack accent argent', 'Rétroviseur ext sport design', 'Réservoir à carburant: 64 litre(s)', "Combiné d'instruments avec fond noir(e)", "Système d'assistance de conduite: système d'aide au stationnement avec caméra aide au recul", 'Siège ventilé av', 'Pack intérieur: diamar dark silver', 'Monogramme indication de version lat', 'Feux ar. non teinté / glace aspect lisse', 'noir(e)', 'Bouchon de réservoir exclusive design', '(d+g)', 'Verrouillage centralisé avec cde radio à distance', 'Boîte de vitesses 8 rapports boîte automatique à double embrayage (pdk)', 'Equipement int. cuir / tissu', 'Sièges sport plus (à réglages électriques', 'Surtapis heritage design', 'Étriers de frein rouge peint', 'Porsche communications management (pcm) compr. dvd module de navigation (étendu)', '8 litre(s) 515 kw turbo catalyseur', 'Peinture unie', '8 litre(s) 331 kw catalyseur', '8 litre(s) 427 kw turbo catalyseur', 'Bandes décoratives sport automobile', '8 litre(s) 350 kw catalyseur', '8 litre(s) 283 kw catalyseur', 'bi ton', 'Hybride 523 kw (moteur 3', 'Glace triangulaire carbone', 'Boîte automatique tiptronic (5 rapports)', 'Patère dossier cuir', 'Moyeux avec fermeture centrale', 'Pack design heritage', '8 litre(s) 397 kw turbo catalyseur', 'Système de pédales et repose pied dans finition/aspect sport', 'Système audio porsche cdr 30 (radio/lecteur cd)', 'Chassis/suspension sport (pasm) à commande électronique', 'Système audio porsche cdr 31 (radio/lecteur cd)', 'paldao', 'Rétroviseur ext asphérique', 'Norme de dépollution euro 5', 'Accès confort (sans clé déverrouillage de porte)', 'Equipement int. enjoliveur façade de commande finition/aspect alu']` All listing characteristics. Example: `{'vehicle': {'co2': {'combined': 233, 'reliable': False, 'ecoBonusMalus': 0}, 'make': 'PORSCHE', 'cubic': 2981, 'label': '(992) COUPE 3.0 385 CARRERA BVA7', 'model': '911', 'packs': [{'name': 'Pack intérieur Aluminium brossé'}, {'name': 'Pack intérieur Carbone'}, {'name': 'Pack intérieur peint'}], 'energy': 'ESSENCE', 'length': 4519, 'critair': {'standardMet': 'EURO6', 'critairLevel': '1', 'isConversionAllowance': False}, 'gearbox': 'AUTOMATIQUE', 'options': [{'name': 'Intérieur cuir'}, {'name': 'Intérieur tout cuir'}, {'name': 'Peinture spéciale'}], 'category': 'COUPE', 'powerDin': 385, 'standard': 'WLTP', 'nbOfDoors': 2, 'equipments': [{'label': 'Volant cuir', 'category': 'Intérieur'}, {'label': 'Antipatinage', 'category': 'Sécurité'}, {'label': 'Ordinateur de bord', 'category': 'Intérieur'}, {'label': 'Alarme', 'category': 'Antivol'}, {'label': 'ABS', 'category': 'Sécurité'}, {'label': 'Bluetooth', 'category': 'Intérieur'}, {'label': 'Régulateur de vitesse', 'category': 'Intérieur'}, {'label': '4 roues directrices', 'category': 'Exterieur et chassis'}, {'label': 'Aide parking', 'category': 'Exterieur et chassis'}, {'label': 'Airbag frontal', 'category': 'Securite'}, {'label': 'Anti démarrage', 'category': 'Antivol'}, {'label': 'ASR', 'category': 'Securite'}, {'label': 'Becquet', 'category': 'Exterieur et chassis'}, {'label': 'Caméra de recul', 'category': 'Interieur'}, {'label': "Carnet d'entretien", 'category': 'Autre'}, {'label': 'Carte main libre', 'category': 'Interieur'}, {'label': 'Climatisation automatique', 'category': 'Interieur'}, {'label': 'Climatisation automatique multi zone', 'category': 'Interieur'}, {'label': 'Contrôle de pression des pneus', 'category': 'Securite'}, {'label': 'Détecteur de pluie', 'category': 'Securite'}, {'label': 'Différentiel autobloquant', 'category': 'Exterieur et chassis'}, {'label': 'Direction assistée', 'category': 'Interieur'}, {'label': 'FAP', 'category': 'Autre'}, {'label': 'Fermeture électrique', 'category': 'Interieur'}, {'label': 'Frein de parking automatique', 'category': 'Exterieur et chassis'}, {'label': 'Jantes alu', 'category': 'Exterieur et chassis'}, {'label': 'Non fumeur', 'category': 'Autre'}, {'label': 'Pack cuir', 'category': 'Interieur'}, {'label': 'Pack sport', 'category': 'Exterieur et chassis'}, {'label': 'Peinture métallisée', 'category': 'Exterieur et chassis'}, {'label': 'Prise audio USB', 'category': 'Interieur'}, {'label': 'Projecteurs bi-xénon', 'category': 'Exterieur et chassis'}, {'label': 'Projecteurs xénon', 'category': 'Exterieur et chassis'}, {'label': 'Sièges électriques', 'category': 'Interieur'}, {'label': 'Suspension sport', 'category': 'Exterieur et chassis'}, {'label': 'Système audio BOSE', 'category': 'Interieur'}, {'label': 'Système audio MP3', 'category': 'Interieur'}, {'label': 'Système Start & Stop', 'category': 'Autre'}, {'label': 'Vitres électriques', 'category': 'Interieur'}, {'label': 'Pack accent noir(e)', 'category': 'Autre'}, {'label': 'Siège chauffant av', 'category': 'Autre'}, {'label': '6 litre(s) 390 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Pavillon carbone', 'category': 'Autre'}, {'label': 'Rétroviseur ext noir(e) peint', 'category': 'Autre'}, {'label': 'Sellerie : cuir partiel', 'category': 'Autre'}, {'label': 'Lunette ar. chauffant(e)/dégivrant(e)', 'category': 'Autre'}, {'label': 'Système audio porsche cdr avec ecran tactile couleur (radio/lecteur cd)', 'category': 'Autre'}, {'label': 'Equipement int. enjoliveur façade de commande carbone', 'category': 'Autre'}, {'label': 'Cadran couleur', 'category': 'Autre'}, {'label': 'Pack suppl. intérieur: ar. cuir', 'category': 'Autre'}, {'label': 'Volant de direction (sport 3 branches)', 'category': 'Autre'}, {'label': 'Levier de sélection et poignée de frein à main alcantara', 'category': 'Autre'}, {'label': '6 litre(s) 254 kw catalyseur', 'category': 'Autre'}, {'label': 'Sticker / bandes décoratives numéro de course', 'category': 'Autre'}, {'label': 'Suppression sièges ar', 'category': 'Autre'}, {'label': 'Restylage fb (option interne)', 'category': 'Autre'}, {'label': 'Vitrage teinté(e)', 'category': 'Autre'}, {'label': 'Voie élargie sur train ar', 'category': 'Autre'}, {'label': 'Système de pédales et repose pied en aluminium', 'category': 'Autre'}, {'label': 'Habillages de bas de caisse peint', 'category': 'Autre'}, {'label': 'capote électrique', 'category': 'Autre'}, {'label': 'avec monogramme individual', 'category': 'Autre'}, {'label': 'Mode de transmission traction intégrale permanente', 'category': 'Autre'}, {'label': 'Equipement int. enjoliveur façade de commande peint', 'category': 'Autre'}, {'label': 'Étriers de frein jaune peint', 'category': 'Autre'}, {'label': '8 litre(s) 478 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Equipement int. enjoliveur façade de commande cuir', 'category': 'Autre'}, {'label': 'Support à boissons embout cuir', 'category': 'Autre'}, {'label': "Combiné d'instruments avec fond argent", 'category': 'Autre'}, {'label': 'Chassis/suspensions surbaissé(e)', 'category': 'Autre'}, {'label': 'Arceau de sécurité noir(e)', 'category': 'Autre'}, {'label': "Déflecteur d'air électrique", 'category': 'Autre'}, {'label': 'Monogramme porsche peint', 'category': 'Autre'}, {'label': '0 litre(s) 368 kw catalyseur', 'category': 'Autre'}, {'label': 'Spoiler av. couleur caisse', 'category': 'Autre'}, {'label': 'Boîte de vitesses 6 rapports sport', 'category': 'Autre'}, {'label': 'Pack intérieur coutures dans une couleur différente', 'category': 'Autre'}, {'label': 'Cadran compte tours', 'category': 'Autre'}, {'label': 'Essuie vitres avec capteur de pluie', 'category': 'Autre'}, {'label': 'Monte charge train av', 'category': 'Autre'}, {'label': 'sport chrono chronomètre', 'category': 'Autre'}, {'label': 'Volant de direction (sport/cuir', 'category': 'Autre'}, {'label': 'Rétroviseur ext rabattable électriquement', 'category': 'Autre'}, {'label': "Système d'airbag crânien (airbag curtain)", 'category': 'Autre'}, {'label': 'Volant de direction chauffant(e)/dégivrant(e) (gt sport / race tex) avec multifonctions et palettes changement vitesse', 'category': 'Autre'}, {'label': 'Garniture de pavillon race tex', 'category': 'Autre'}, {'label': 'Pré équipement vehicle tracking system', 'category': 'Autre'}, {'label': 'Sièges sport av', 'category': 'Autre'}, {'label': 'recouvrements cuir', 'category': 'Autre'}, {'label': '6 litre(s) 305 kw catalyseur', 'category': 'Autre'}, {'label': 'Norme de dépollution euro 6d temp', 'category': 'Autre'}, {'label': 'Volant de direction (cuir 3 branches) avec palettes changement vitesse', 'category': 'Autre'}, {'label': '8 litre(s) 368 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Volant de direction chauffant(e)/dégivrant(e) (gt sport / cuir) avec multifonctions et palettes changement vitesse', 'category': 'Autre'}, {'label': 'Ceintures de sécurité couleur', 'category': 'Autre'}, {'label': 'Système audio porsche cdr 24 (radio/lecteur cd)', 'category': 'Autre'}, {'label': 'filtre à pollen', 'category': 'Autre'}, {'label': '6 litre(s) 340 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'embout noir(e)', 'category': 'Autre'}, {'label': 'Supports isofix pour siège enfant sur siège ar', 'category': 'Autre'}, {'label': 'décor peint', 'category': 'Autre'}, {'label': 'Adaptatif sièges sport compr. réglage de siège 18 directions et pack memoire', 'category': 'Autre'}, {'label': 'Rétroviseur int cuir', 'category': 'Autre'}, {'label': 'Interface universelle audio', 'category': 'Autre'}, {'label': 'Console centrale ar cuir', 'category': 'Autre'}, {'label': 'Porsche stability management (psm)', 'category': 'Autre'}, {'label': '6 litre(s) 355 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Déflecteur spoiler av. couleur caisse', 'category': 'Autre'}, {'label': "appuis d'aile noir(e)", 'category': 'Autre'}, {'label': '3 branches) avec multifonctions', 'category': 'Autre'}, {'label': 'Siège av gauche et rétroviseur ext avec fonction mémoire (mémoire conducteur)', 'category': 'Autre'}, {'label': "Système d'assistance de conduite: assistant maintien de trajectoire", 'category': 'Autre'}, {'label': 'clignotants LED', 'category': 'Autre'}, {'label': 'Equipement int. cuir / sport tex', 'category': 'Autre'}, {'label': 'Monogramme série peint', 'category': 'Autre'}, {'label': 'Volant de direction chauffant(e)/dégivrant(e) (microfibre race tex) avec multifonctions', 'category': 'Autre'}, {'label': 'Moyeu volant de direction et levier de sélection cuir lisse', 'category': 'Autre'}, {'label': '8 litre(s) 300 kw catalyseur', 'category': 'Autre'}, {'label': 'Chassis/suspensions pour sport automobile réglable', 'category': 'Autre'}, {'label': 'Clés véhicule couleur caisse peint compr. étui cuir', 'category': 'Autre'}, {'label': "Miroir de courtoisie à l'ar éclairé(e)", 'category': 'Autre'}, {'label': 'Levier de sélection aluminium', 'category': 'Autre'}, {'label': 'Protecteurs de bas de marche noir(e)', 'category': 'Autre'}, {'label': '0 litre(s) 331 kw catalyseur', 'category': 'Autre'}, {'label': 'Construction allégée et insonorisant vitrage', 'category': 'Autre'}, {'label': 'Equipement int. cuir / race tex', 'category': 'Autre'}, {'label': 'Monogramme 911 couleurs chrome', 'category': 'Autre'}, {'label': 'lamelles cuir', 'category': 'Autre'}, {'label': 'Étriers de frein noir(e) anodisé', 'category': 'Autre'}, {'label': 'Volant de direction (alcantara 3 branches) avec palettes changement vitesse', 'category': 'Autre'}, {'label': 'Dispositif de freinage céramique (porsche ceramic composite brake', 'category': 'Autre'}, {'label': '8 litre(s) 320 kw catalyseur', 'category': 'Autre'}, {'label': 'Jantes alliage léger (argent', 'category': 'Autre'}, {'label': '0 litre(s) 353 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Pack sport chrono avec porsche design subsecond montre', 'category': 'Autre'}, {'label': 'Pack suppl. intérieur: panneau de porte cuir', 'category': 'Autre'}, {'label': 'Sièges sport dossiers cuir', 'category': 'Autre'}, {'label': 'Mode de transmission transmission intégrale', 'category': 'Autre'}, {'label': 'pccb)', 'category': 'Autre'}, {'label': 'Moyeu volant de direction cuir', 'category': 'Autre'}, {'label': 'Targa', 'category': 'Autre'}, {'label': '8 litre(s) 261 kw catalyseur', 'category': 'Autre'}, {'label': 'Volant de direction chauffant(e)/dégivrant(e) (cuir) avec multifonctions', 'category': 'Autre'}, {'label': 'Gt3 rs', 'category': 'Autre'}, {'label': "Éclairage ambiant orienté vers l'arrière", 'category': 'Autre'}, {'label': "Système d'airbag crânien porsche side impact protection system (posip)", 'category': 'Autre'}, {'label': '7 litre(s) 405 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Gt2 rs', 'category': 'Autre'}, {'label': 'Projecteur principal led compr. porsche dynamic light système (pdls)', 'category': 'Autre'}, {'label': 'compr. porsche dynamic light système plus (pdls+)', 'category': 'Autre'}, {'label': '8 litre(s) 294 kw catalyseur', 'category': 'Autre'}, {'label': 'Pack design sport noir(e)', 'category': 'Autre'}, {'label': "Système d'assistance de conduite: système d'aide au stationnement av et ar compr. caméra aide au recul et surround view", 'category': 'Autre'}, {'label': '6 litre(s) 471 kw)', 'category': 'Autre'}, {'label': 'Aile av carbone couleur caisse', 'category': 'Autre'}, {'label': 'Garniture de pavillon alcantara', 'category': 'Autre'}, {'label': 'Étriers de frein noir(e) (brillant)', 'category': 'Autre'}, {'label': "Régulateur du couple d'inertie du moteur (msr)", 'category': 'Autre'}, {'label': 'Sièges baquet av', 'category': 'Autre'}, {'label': '0 litre(s) 309 kw catalyseur', 'category': 'Autre'}, {'label': 'Arceaux targa platinum éclat soyeux', 'category': 'Autre'}, {'label': 'Moteur 3', 'category': 'Autre'}, {'label': 'Surtapis avec bordure cuir', 'category': 'Autre'}, {'label': 'Rétroviseur ext cache de rétroviseur peint', 'category': 'Autre'}, {'label': 'Aéro kit turbo', 'category': 'Autre'}, {'label': 'Protection volumétrique (système infrarouge)', 'category': 'Autre'}, {'label': 'Arceau de sécurité / cage', 'category': 'Autre'}, {'label': 'Système de freinage renforcé(e)', 'category': 'Autre'}, {'label': 'Volant de direction (gt sport cuir) avec palettes changement vitesse', 'category': 'Autre'}, {'label': 'Colonne de direction (volant de direction) réglable(s)', 'category': 'Autre'}, {'label': "Déflecteur d'air lat sideblade carbone", 'category': 'Autre'}, {'label': 'Direction assistée à commande électronique (servotronic)', 'category': 'Autre'}, {'label': 'Garniture de pavillon tissu', 'category': 'Autre'}, {'label': 'Appuie têtes av avec porsche', 'category': 'Autre'}, {'label': 'Carrosserie: 2 portes', 'category': 'Autre'}, {'label': 'Hybride 398 kw (moteur 3', 'category': 'Autre'}, {'label': 'Moteur électrique 41 kw (transmission hybride)', 'category': 'Autre'}, {'label': 'Pack touring', 'category': 'Autre'}, {'label': 'embout inox', 'category': 'Autre'}, {'label': '8 litre(s) 446 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'couvercle compartiment/vide poches cuir avec monogramme spécifique et coutures couleur contrastante', 'category': 'Autre'}, {'label': 'Protecteurs de bas de marche (carbone) éclairé(e)', 'category': 'Autre'}, {'label': "Système d'assistance de conduite: assistance au démarrage en côte (hill holder)", 'category': 'Autre'}, {'label': 'Porsche active suspension management (pasm)', 'category': 'Autre'}, {'label': '0 litre(s) 290 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Cde vocale pour pcm', 'category': 'Autre'}, {'label': 'Chassis/suspension sport surbaissé(e) (20 mm)', 'category': 'Autre'}, {'label': 'Étoiles de jantes peint (de couleur différente)', 'category': 'Autre'}, {'label': 'Bouchon de réservoir finition/aspect alu', 'category': 'Autre'}, {'label': 'Embout sortie de ceinture pied milieu cuir', 'category': 'Autre'}, {'label': 'Pack intérieur: bois', 'category': 'Autre'}, {'label': '8 litre(s) 390 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Rétroviseur ext couverture carbone (sport design)', 'category': 'Autre'}, {'label': 'Éclairage diurne led 4 points', 'category': 'Autre'}, {'label': "Cadre/encadrement combiné d'instruments finition/aspect alu", 'category': 'Autre'}, {'label': 'Enjoliveurs de vitre aluminium', 'category': 'Autre'}, {'label': 'Pack suppl. intérieur: façade de commande et panneau de porte cuir', 'category': 'Autre'}, {'label': '6 litre(s) 357 kw)', 'category': 'Autre'}, {'label': 'Equipement int. cuir alcantara', 'category': 'Autre'}, {'label': 'Moteur 4', 'category': 'Autre'}, {'label': 'Spoiler ar. couleur caisse', 'category': 'Autre'}, {'label': 'Protecteurs de bas de marche (aluminium dark silver) éclairé(e)', 'category': 'Autre'}, {'label': 'Levier de sélection des rapports enjoliveur finition/aspect alu', 'category': 'Autre'}, {'label': "Eclaireur de plancher à l'ar", 'category': 'Autre'}, {'label': "Cadre/encadrement combiné d'instruments cuir", 'category': 'Autre'}, {'label': 'Ceinture de sécurité à 6 points coté passager', 'category': 'Autre'}, {'label': 'Monogramme 911 noir(e)', 'category': 'Autre'}, {'label': 'Volant de direction (gt sport / race tex) avec multifonctions et palettes changement vitesse', 'category': 'Autre'}, {'label': 'Volant de direction avec palettes changement vitesse (vareq suppl. pour volant de direction)', 'category': 'Autre'}, {'label': 'cache peint', 'category': 'Autre'}, {'label': 'Projecteur principal led compr. porsche dynamic light système plus (pdls+)', 'category': 'Autre'}, {'label': 'compte tours', 'category': 'Autre'}, {'label': 'Colonne de direction (volant de direction) à réglages électriques', 'category': 'Autre'}, {'label': 'Pare soleil avec miroir(s) (éclairé(e))', 'category': 'Autre'}, {'label': 'Equipement int. cuir brillant', 'category': 'Autre'}, {'label': 'Sticker / bandes décoratives lat', 'category': 'Autre'}, {'label': 'E gaz', 'category': 'Autre'}, {'label': 'Kit de réparation des pneumatiques', 'category': 'Autre'}, {'label': 'métallisé peint)', 'category': 'Autre'}, {'label': 'Sièges sport plus dossiers cuir avec dans une couleur différente coutures', 'category': 'Autre'}, {'label': '0 litre(s) 386 kw catalyseur', 'category': 'Autre'}, {'label': 'Réception radio digital(e) (dab+)', 'category': 'Autre'}, {'label': 'Airbag lat av', 'category': 'Autre'}, {'label': 'Sièges baquet sport av', 'category': 'Autre'}, {'label': 'Siège baquet av gauche', 'category': 'Autre'}, {'label': 'décor cuir', 'category': 'Autre'}, {'label': 'Volant de direction (gt sport alcantara / race tex) avec palettes changement vitesse', 'category': 'Autre'}, {'label': 'brossé)', 'category': 'Autre'}, {'label': 'coutures en couleur contrastante argent)', 'category': 'Autre'}, {'label': 'Projecteurs bi xénon compr. porsche dynamic light système (pdls)', 'category': 'Autre'}, {'label': 'Sièges baquets allégés av', 'category': 'Autre'}, {'label': 'Projecteurs légers', 'category': 'Autre'}, {'label': 'coutures dans/en/au couleur contrastante)', 'category': 'Autre'}, {'label': 'Protecteurs de bas de marche (inox) éclairé(e)', 'category': 'Autre'}, {'label': 'Jantes alliage léger (métallisé peint)', 'category': 'Autre'}, {'label': 'Sellerie : alcantara / simili cuir', 'category': 'Autre'}, {'label': "Grille d'entrée d'air peint", 'category': 'Autre'}, {'label': 'éclairé(e) (aluminium noir(e)', 'category': 'Autre'}, {'label': 'Boîte de vitesses 7 rapports boîte automatique à double embrayage (pdk)', 'category': 'Autre'}, {'label': 'Feux de brouillard ar', 'category': 'Autre'}, {'label': 'Sound package plus', 'category': 'Autre'}, {'label': 'Norme de dépollution euro 6e', 'category': 'Autre'}, {'label': 'Pack suppl. intérieur: façade de commande cuir', 'category': 'Autre'}, {'label': '0 litre(s) 383 kw catalyseur', 'category': 'Autre'}, {'label': 'Éclairage directionnel', 'category': 'Autre'}, {'label': 'de couleur différente', 'category': 'Autre'}, {'label': 'Moyeu volant de direction avec coutures de couleur différente (de couleur différente)', 'category': 'Autre'}, {'label': '6 litre(s) 331 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Rétroviseur ext peint', 'category': 'Autre'}, {'label': 'Enjoliveurs de vitre noir(e) (brillant)', 'category': 'Autre'}, {'label': 'Essuie vitre ar.', 'category': 'Autre'}, {'label': '8 litre(s) 383 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Volant de direction (cuir lisse/sport', 'category': 'Autre'}, {'label': 'Pack clubsport', 'category': 'Autre'}, {'label': 'Sièges ar (2 places assises) dossiers ar rabattable', 'category': 'Autre'}, {'label': 'Airbag tête epaules av (thoraxbag)', 'category': 'Autre'}, {'label': 'Direction assistée plus (asservie à la vitesse)', 'category': 'Autre'}, {'label': '8 litre(s) 412 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Batterie légère (lithium ion)', 'category': 'Autre'}, {'label': '6 litre(s) 456 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'étendu sellerie cuir', 'category': 'Autre'}, {'label': "Ionisateur d'air", 'category': 'Autre'}, {'label': 'embout av carbone', 'category': 'Autre'}, {'label': 'Rétroviseur ext à réglage électrique et dégivrant', 'category': 'Autre'}, {'label': 'Repose pied finition/aspect sport', 'category': 'Autre'}, {'label': 'compr. porsche dynamic light système (pdls)', 'category': 'Autre'}, {'label': 'Levier de sélection cuir', 'category': 'Autre'}, {'label': 'Pack intérieur: cuir', 'category': 'Autre'}, {'label': 'padm)', 'category': 'Autre'}, {'label': 'Dossier ar deux parties', 'category': 'Autre'}, {'label': 'Siège av gauche à réglages électriques (avec memory)', 'category': 'Autre'}, {'label': 'Panneau de porte construction allégée', 'category': 'Autre'}, {'label': 'Sport touche', 'category': 'Autre'}, {'label': 'matelassé(e) (vareq suppl. vers volant de direction)', 'category': 'Autre'}, {'label': 'Mode de transmission roues ar motrices', 'category': 'Autre'}, {'label': "Pot d'échappement sport", 'category': 'Autre'}, {'label': 'Porsche torque vectoring (ptv)', 'category': 'Autre'}, {'label': 'Rétroviseur ext à réglages électriques', 'category': 'Autre'}, {'label': 'Automatique freins différentiel (abd)', 'category': 'Autre'}, {'label': 'Moyeux caches porsche couleur', 'category': 'Autre'}, {'label': 'Rétroviseur ext partie inférieure peint (sport design)', 'category': 'Autre'}, {'label': 'Pare brise avec antenne', 'category': 'Autre'}, {'label': '0 litre(s) 283 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Equipement int. cuir nature', 'category': 'Autre'}, {'label': 'Porsche torque vectoring plus (ptv plus)', 'category': 'Autre'}, {'label': 'Pack memory conducteur', 'category': 'Autre'}, {'label': 'Embout sport finition/aspect 4 embouts', 'category': 'Autre'}, {'label': '3. feu stop', 'category': 'Autre'}, {'label': 'Habillages de bas de caisse couleur caisse design sport', 'category': 'Autre'}, {'label': 'Equipement int. microfibre race tex', 'category': 'Autre'}, {'label': '0 litre(s) 272 kw catalyseur', 'category': 'Autre'}, {'label': 'surteinté', 'category': 'Autre'}, {'label': 'Sièges sport plus dossiers peint', 'category': 'Autre'}, {'label': 'Dossier ar fractionné (40:20:40)', 'category': 'Autre'}, {'label': '6 litre(s) 353 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Habillage de colonne de direction cuir avec dans une couleur différente coutures', 'category': 'Autre'}, {'label': 'Lave phares (lave projecteurs)', 'category': 'Autre'}, {'label': 'Arceaux targa noir(e)', 'category': 'Autre'}, {'label': 'Pare soleil race tex', 'category': 'Autre'}, {'label': 'Couvercle boite à fusibles cuir', 'category': 'Autre'}, {'label': 'Commande de capote manuel(le)', 'category': 'Autre'}, {'label': 'Chargeur à induction pour smartphone (charge sans fil)', 'category': 'Autre'}, {'label': 'Hardtop (cabriolet)', 'category': 'Autre'}, {'label': '4 litre(s) 257 kw catalyseur', 'category': 'Autre'}, {'label': "Equipement int. diffuseurs d'air cuir", 'category': 'Autre'}, {'label': 'Pare brise avec bandeau pare soleil supérieur(e)', 'category': 'Autre'}, {'label': 'Porsche design subsecond montre', 'category': 'Autre'}, {'label': 'Dynamique support moteur (porsche active drivetrain mount', 'category': 'Autre'}, {'label': 'Siège baquet av droit', 'category': 'Autre'}, {'label': 'Equipement int. équipement de série / race tex', 'category': 'Autre'}, {'label': 'Porsche management de traction (ptm)', 'category': 'Autre'}, {'label': 'Sellerie : cuir / alcantara', 'category': 'Autre'}, {'label': 'feux à LED', 'category': 'Autre'}, {'label': 'Pack éclairage int / pack design lumière', 'category': 'Autre'}, {'label': 'Blocage transversal essieu ar mécanique', 'category': 'Autre'}, {'label': 'Pré équipement téléphone/téléphone mobile avec interface bluetooth', 'category': 'Autre'}, {'label': 'Rétroviseur ext partie inférieure couleur caisse et pied de rétroviseur noir(e) (finition brillante) peint', 'category': 'Autre'}, {'label': 'Boîte de vitesses 7 rapports sport boîte automatique à double embrayage (pdk)', 'category': 'Autre'}, {'label': 'Porsche communications management (pcm) compr. online module de navigation', 'category': 'Autre'}, {'label': 'Supports isofix pour siège enfant sur siège passager', 'category': 'Autre'}, {'label': '8 litre(s) 316 kw catalyseur', 'category': 'Autre'}, {'label': 'Vehicle tracking system (pvts)', 'category': 'Autre'}, {'label': 'Allumage automatique pour feux de croisement', 'category': 'Autre'}, {'label': 'lamelles finition/aspect alu', 'category': 'Autre'}, {'label': '6 litre(s) 280 kw catalyseur', 'category': 'Autre'}, {'label': 'Habillage de bas de caisse int. cuir', 'category': 'Autre'}, {'label': 'Habillage av. sport design', 'category': 'Autre'}, {'label': 'Partie inf ar sport design peint (noir(e))', 'category': 'Autre'}, {'label': '6 litre(s) 239 kw catalyseur', 'category': 'Autre'}, {'label': 'Pare soleil cuir', 'category': 'Autre'}, {'label': 'tons cuir de série', 'category': 'Autre'}, {'label': "système d'appel d'urgence", 'category': 'Autre'}, {'label': 'Gt3 cup', 'category': 'Autre'}, {'label': '2 directions)', 'category': 'Autre'}, {'label': 'Pack sport léger', 'category': 'Autre'}, {'label': 'Jantes alliage léger (gris', 'category': 'Autre'}, {'label': '4 directions)', 'category': 'Autre'}, {'label': '0 litre(s) 375 kw catalyseur', 'category': 'Autre'}, {'label': 'Sièges sport électrique (14 directions) compr. pack memoire', 'category': 'Autre'}, {'label': 'Afficheur multifonctions / ordinateur de bord', 'category': 'Autre'}, {'label': 'Services online mobile android auto', 'category': 'Autre'}, {'label': 'Dispositif antivol pour roues (écrous antivol)', 'category': 'Autre'}, {'label': 'Phares à matrice de led compr. porsche dynamic light système plus (pdls+)', 'category': 'Autre'}, {'label': 'Appuie têtes av et ar avec porsche', 'category': 'Autre'}, {'label': 'Attaché case cuir', 'category': 'Autre'}, {'label': 'Levier de sélection alcantara / race tex', 'category': 'Autre'}, {'label': 'Éclairage ambiant garniture de pavillon', 'category': 'Autre'}, {'label': 'Pack accent argent', 'category': 'Autre'}, {'label': 'Rétroviseur ext sport design', 'category': 'Autre'}, {'label': 'Réservoir à carburant: 64 litre(s)', 'category': 'Autre'}, {'label': "Combiné d'instruments avec fond noir(e)", 'category': 'Autre'}, {'label': "Système d'assistance de conduite: système d'aide au stationnement avec caméra aide au recul", 'category': 'Autre'}, {'label': 'Siège ventilé av', 'category': 'Autre'}, {'label': 'Pack intérieur: diamar dark silver', 'category': 'Autre'}, {'label': 'Monogramme indication de version lat', 'category': 'Autre'}, {'label': 'Feux ar. non teinté / glace aspect lisse', 'category': 'Autre'}, {'label': 'noir(e)', 'category': 'Autre'}, {'label': 'Bouchon de réservoir exclusive design', 'category': 'Autre'}, {'label': '(d+g)', 'category': 'Autre'}, {'label': 'Verrouillage centralisé avec cde radio à distance', 'category': 'Autre'}, {'label': 'Boîte de vitesses 8 rapports boîte automatique à double embrayage (pdk)', 'category': 'Autre'}, {'label': 'Equipement int. cuir / tissu', 'category': 'Autre'}, {'label': 'Sièges sport plus (à réglages électriques', 'category': 'Autre'}, {'label': 'Surtapis heritage design', 'category': 'Autre'}, {'label': 'Étriers de frein rouge peint', 'category': 'Autre'}, {'label': 'Porsche communications management (pcm) compr. dvd module de navigation (étendu)', 'category': 'Autre'}, {'label': '8 litre(s) 515 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Peinture unie', 'category': 'Autre'}, {'label': '8 litre(s) 331 kw catalyseur', 'category': 'Autre'}, {'label': '8 litre(s) 427 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Bandes décoratives sport automobile', 'category': 'Autre'}, {'label': '8 litre(s) 350 kw catalyseur', 'category': 'Autre'}, {'label': '8 litre(s) 283 kw catalyseur', 'category': 'Autre'}, {'label': 'bi ton', 'category': 'Autre'}, {'label': 'Hybride 523 kw (moteur 3', 'category': 'Autre'}, {'label': 'Glace triangulaire carbone', 'category': 'Autre'}, {'label': 'Boîte automatique tiptronic (5 rapports)', 'category': 'Autre'}, {'label': 'Patère dossier cuir', 'category': 'Autre'}, {'label': 'Moyeux avec fermeture centrale', 'category': 'Autre'}, {'label': 'Pack design heritage', 'category': 'Autre'}, {'label': '8 litre(s) 397 kw turbo catalyseur', 'category': 'Autre'}, {'label': 'Système de pédales et repose pied dans finition/aspect sport', 'category': 'Autre'}, {'label': 'Système audio porsche cdr 30 (radio/lecteur cd)', 'category': 'Autre'}, {'label': 'Chassis/suspension sport (pasm) à commande électronique', 'category': 'Autre'}, {'label': 'Système audio porsche cdr 31 (radio/lecteur cd)', 'category': 'Autre'}, {'label': 'paldao', 'category': 'Autre'}, {'label': 'Rétroviseur ext asphérique', 'category': 'Autre'}, {'label': 'Norme de dépollution euro 5', 'category': 'Autre'}, {'label': 'Accès confort (sans clé déverrouillage de porte)', 'category': 'Autre'}, {'label': 'Equipement int. enjoliveur façade de commande finition/aspect alu', 'category': 'Autre'}], 'consumption': {'combined': 10.3, 'reliable': False}, 'externalColor': 'gris', 'internalColor': 'cuir', 'maxTrunkVolume': 132, 'commercialModel': '911', 'seatingCapacity': 4, 'firstTrafficDate': '2024-10-07', 'fiscalHorsePower': 27}, 'classified': {'year': '2024', 'price': 154990, 'title': 'PORSCHE 911 TYPE 992', 'status': 'ONLINE', 'mileage': 10930, 'zipCode': '06800', 'firstHand': True, 'mappingId': 'MDQ1MTEyNzYyMQ==', 'reference': 'E118586883', 'visitPlace': '06', 'description': {}, 'customerType': 'PRO', 'mileageBadge': 'MEDIUM_MILEAGE', 'referencePro': '16', 'goodDealBadge': 'BAD_DEAL', 'averageMileage': 11151, 'priceVariation': {'prices': {'current': 154990, 'history': [154990, 154990], 'initial': 154990, 'isDropping': False, 'percentage': 0, 'isPriceCrossed': False}, 'isAgeCapped': False, 'displayedAge': 2}, 'refinedQuotation': 126805, 'reliabilityIndex': 3, 'customerReference': 'C060750', 'ownerCorrelationId': 'C060750', 'publicationEndDate': '2999-01-01T00:00:00Z', 'constructorWarranty': {'endDate': '2026-10-06', 'duration': 24}}}` List of vehicle options. Example: `['Intérieur cuir', 'Intérieur tout cuir', 'Peinture spéciale']` Seller's address. Example: `38 CHEMIN DU VALLON DES VAUX, CAGNES-SUR-MER` Seller's postal code. Example: `06800` Seller name. Example: `MOTORSPORT BY TB` Seller category. Example: `INTERMEDIAIRE` Seller company founding date. Example: `2026-03-11T15:43:25+00:00` Whether seller is verified. Example: `false` Seller's comment or description Vehicle rating page link. Example: `/cote-auto-porsche-911-(992)+coupe+3.0+385+carrera+bva7-2024.html?km=10930&price=154990&zip-code=06800&version-id=26428228&modelCom=911+type+992&ref=69118586883"ation=126805&trustIndex=3` Vehicle history report link Technical specifications page link. Example: `/fiche-technique-voiture-porsche-911-(992)+coupe+3.0+385+carrera+bva7-2024.html?version-id=26428228&modelCom=911+type+992` CO2 emissions. Example: `233.0` Fiscal horsepower rating. Example: `27.0` Engine power in horsepower. Example: `385.0` Number of seats. Example: `4` Engine cylinder capacity. Example: `2981.0` Battery consumption rate Battery capacity in kWh Electric range in km Whether vehicle is a plug-in hybrid Vehicle length. Example: `4519` Maximum trunk volume in litres. Example: `132` First registration date. Example: `2024-10-06` French Crit'Air pollution sticker level. Example: `1` Euro emissions standard. Example: `EURO6` Price variation or change. Example: `{'prices': {'current': 154990, 'history': [154990, 154990], 'initial': 154990, 'isDropping': False, 'percentage': 0, 'isPriceCrossed': False}, 'isAgeCapped': False, 'displayedAge': 2}` Average expected mileage for the year. Example: `11151` Warranty duration in months. Example: `24` Warranty end date. Example: `2026-10-05` Whether vehicle has had only one owner. Example: `true` Number of previous owners Mapping identifier. Example: `MDQ1MTEyNzYyMQ==` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 52300, "object": "result", "squid": "0d72266853630ccf5271ab983f1d3600", "run": "077f196f2e213d75aa5f4c640855e2f8", "reference": "E118586883", "listing_url": "https://www.lacentrale.fr/auto-occasion-annonce-69118586883.html", "price": 154990.0, "financing_teasing_price": null, "photo_url": "https://image-annonce.lacentrale.fr/1096x829/E118586883_STANDARD_0.jpg", "photo_urls_mobile": [ "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_0.jpg?format=webp&size=285x214&watermark=lc&signature=639071adacd9528c215e8872ccb22969a1a7e6ac2b3a853bb4d2d935", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_1.jpg?format=webp&size=140x105&watermark=lc&signature=a7aec3d26decefda5cf888170c580e86bd6bcca67f2d779a39eddf4d", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_2.jpg?format=webp&size=140x105&watermark=lc&signature=a7aec3d26decefda5cf888170c580e86bd6bcca67f2d779a39eddf4d" ], "pictures_count": 17, "pictures_count_date": "2026-03-21T14:56:09", "make": "PORSCHE", "model": "911", "detailed_model": "PORSCHE 911 TYPE 992", "commercial_name": "911 TYPE 992", "version": "(992) COUPE 3.0 385 CARRERA BVA7", "trim_level": "CARRERA", "motorization": "3.0 385", "year": 2024, "mileage": 10930, "energy": "ESSENCE", "gearbox": "AUTO", "doors": 2, "category": "COUPE", "family": "AUTO", "external_color": "gris", "customer_type": "PRO", "customer_reference": "C060750", "customer_family_code": "INTERMEDIAIRE", "contact_name": "MOTORSPORT BY TB", "display_phone": "33451127621", "country": "FR", "visit_place": "06", "distance_km": null, "delivery_is_active": true, "delivery_available_prices": [ 0, 100, 200, 300, 500 ], "is_deliverable": false, "delivery_price": null, "is_new": true, "pictures_360_exterieur": false, "pictures_photosphere": false, "all_photos": [ "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_0.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_1.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_10.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_11.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_2.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_3.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_12.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_4.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_9.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_5.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_6.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_7.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_13.jpg?fit=inside&format=webp&lastUpdated=1774104969&size=1096x829&signature=b23a53dca5f7fcf80bfa584cab3fddd7e753a04fdd4f46e3908225af", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_8.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_14.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_15.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb", "https://pictures.lacentrale.fr/classifieds/E118586883_STANDARD_16.jpg?fit=inside&format=webp&lastUpdated=1774104968&size=1096x829&signature=3e4537d3acd8c3cc01c95f419c1a3a9706acbe80ac1b609fa95aa8bb" ], "autoviza": false, "good_deal_badge": "BAD_DEAL", "manufacturer_warranty_duration": 1, "publication_options": [ "CALLTRACKING", "PHOTO_360", "PHOTO_LISTING", "PHOTO_WEB", "WEB_IMMEDIAT", "DELIVERY", "STRENGTHS", "MULTI_PHOTOS" ], "first_online_date": "2026-03-20T23:00:00+00:00", "last_update": "2026-03-22T11:01:13", "score": 639.93634, "request_date": "2026-03-23T05:43:55.979536+00:00", "equipment_list": [ "Volant cuir", "Antipatinage", "Ordinateur de bord", "Alarme", "ABS", "Bluetooth", "Régulateur de vitesse", "4 roues directrices", "Aide parking", "Airbag frontal", "Anti démarrage", "ASR", "Becquet", "Caméra de recul", "Carnet d'entretien", "Carte main libre", "Climatisation automatique", "Climatisation automatique multi zone", "Contrôle de pression des pneus", "Détecteur de pluie", "Différentiel autobloquant", "Direction assistée", "FAP", "Fermeture électrique", "Frein de parking automatique", "Jantes alu", "Non fumeur", "Pack cuir", "Pack sport", "Peinture métallisée", "Prise audio USB", "Projecteurs bi-xénon", "Projecteurs xénon", "Sièges électriques", "Suspension sport", "Système audio BOSE", "Système audio MP3", "Système Start & Stop", "Vitres électriques", "Pack accent noir(e)", "Siège chauffant av", "6 litre(s) 390 kw turbo catalyseur", "Pavillon carbone", "Rétroviseur ext noir(e) peint", "Sellerie : cuir partiel", "Lunette ar. chauffant(e)/dégivrant(e)", "Système audio porsche cdr avec ecran tactile couleur (radio/lecteur cd)", "Equipement int. enjoliveur façade de commande carbone", "Cadran couleur", "Pack suppl. intérieur: ar. cuir", "Volant de direction (sport 3 branches)", "Levier de sélection et poignée de frein à main alcantara", "6 litre(s) 254 kw catalyseur", "Sticker / bandes décoratives numéro de course", "Suppression sièges ar", "Restylage fb (option interne)", "Vitrage teinté(e)", "Voie élargie sur train ar", "Système de pédales et repose pied en aluminium", "Habillages de bas de caisse peint", "capote électrique", "avec monogramme individual", "Mode de transmission traction intégrale permanente", "Equipement int. enjoliveur façade de commande peint", "Étriers de frein jaune peint", "8 litre(s) 478 kw turbo catalyseur", "Equipement int. enjoliveur façade de commande cuir", "Support à boissons embout cuir", "Combiné d'instruments avec fond argent", "Chassis/suspensions surbaissé(e)", "Arceau de sécurité noir(e)", "Déflecteur d'air électrique", "Monogramme porsche peint", "0 litre(s) 368 kw catalyseur", "Spoiler av. couleur caisse", "Boîte de vitesses 6 rapports sport", "Pack intérieur coutures dans une couleur différente", "Cadran compte tours", "Essuie vitres avec capteur de pluie", "Monte charge train av", "sport chrono chronomètre", "Volant de direction (sport/cuir", "Rétroviseur ext rabattable électriquement", "Système d'airbag crânien (airbag curtain)", "Volant de direction chauffant(e)/dégivrant(e) (gt sport / race tex) avec multifonctions et palettes changement vitesse", "Garniture de pavillon race tex", "Pré équipement vehicle tracking system", "Sièges sport av", "recouvrements cuir", "6 litre(s) 305 kw catalyseur", "Norme de dépollution euro 6d temp", "Volant de direction (cuir 3 branches) avec palettes changement vitesse", "8 litre(s) 368 kw turbo catalyseur", "Volant de direction chauffant(e)/dégivrant(e) (gt sport / cuir) avec multifonctions et palettes changement vitesse", "Ceintures de sécurité couleur", "Système audio porsche cdr 24 (radio/lecteur cd)", "filtre à pollen", "6 litre(s) 340 kw turbo catalyseur", "embout noir(e)", "Supports isofix pour siège enfant sur siège ar", "décor peint", "Adaptatif sièges sport compr. réglage de siège 18 directions et pack memoire", "Rétroviseur int cuir", "Interface universelle audio", "Console centrale ar cuir", "Porsche stability management (psm)", "6 litre(s) 355 kw turbo catalyseur", "Déflecteur spoiler av. couleur caisse", "appuis d'aile noir(e)", "3 branches) avec multifonctions", "Siège av gauche et rétroviseur ext avec fonction mémoire (mémoire conducteur)", "Système d'assistance de conduite: assistant maintien de trajectoire", "clignotants LED", "Equipement int. cuir / sport tex", "Monogramme série peint", "Volant de direction chauffant(e)/dégivrant(e) (microfibre race tex) avec multifonctions", "Moyeu volant de direction et levier de sélection cuir lisse", "8 litre(s) 300 kw catalyseur", "Chassis/suspensions pour sport automobile réglable", "Clés véhicule couleur caisse peint compr. étui cuir", "Miroir de courtoisie à l'ar éclairé(e)", "Levier de sélection aluminium", "Protecteurs de bas de marche noir(e)", "0 litre(s) 331 kw catalyseur", "Construction allégée et insonorisant vitrage", "Equipement int. cuir / race tex", "Monogramme 911 couleurs chrome", "lamelles cuir", "Étriers de frein noir(e) anodisé", "Volant de direction (alcantara 3 branches) avec palettes changement vitesse", "Dispositif de freinage céramique (porsche ceramic composite brake", "8 litre(s) 320 kw catalyseur", "Jantes alliage léger (argent", "0 litre(s) 353 kw turbo catalyseur", "Pack sport chrono avec porsche design subsecond montre", "Pack suppl. intérieur: panneau de porte cuir", "Sièges sport dossiers cuir", "Mode de transmission transmission intégrale", "pccb)", "Moyeu volant de direction cuir", "Targa", "8 litre(s) 261 kw catalyseur", "Volant de direction chauffant(e)/dégivrant(e) (cuir) avec multifonctions", "Gt3 rs", "Éclairage ambiant orienté vers l'arrière", "Système d'airbag crânien porsche side impact protection system (posip)", "7 litre(s) 405 kw turbo catalyseur", "Gt2 rs", "Projecteur principal led compr. porsche dynamic light système (pdls)", "compr. porsche dynamic light système plus (pdls+)", "8 litre(s) 294 kw catalyseur", "Pack design sport noir(e)", "Système d'assistance de conduite: système d'aide au stationnement av et ar compr. caméra aide au recul et surround view", "6 litre(s) 471 kw)", "Aile av carbone couleur caisse", "Garniture de pavillon alcantara", "Étriers de frein noir(e) (brillant)", "Régulateur du couple d'inertie du moteur (msr)", "Sièges baquet av", "0 litre(s) 309 kw catalyseur", "Arceaux targa platinum éclat soyeux", "Moteur 3", "Surtapis avec bordure cuir", "Rétroviseur ext cache de rétroviseur peint", "Aéro kit turbo", "Protection volumétrique (système infrarouge)", "Arceau de sécurité / cage", "Système de freinage renforcé(e)", "Volant de direction (gt sport cuir) avec palettes changement vitesse", "Colonne de direction (volant de direction) réglable(s)", "Déflecteur d'air lat sideblade carbone", "Direction assistée à commande électronique (servotronic)", "Garniture de pavillon tissu", "Appuie têtes av avec porsche", "Carrosserie: 2 portes", "Hybride 398 kw (moteur 3", "Moteur électrique 41 kw (transmission hybride)", "Pack touring", "embout inox", "8 litre(s) 446 kw turbo catalyseur", "couvercle compartiment/vide poches cuir avec monogramme spécifique et coutures couleur contrastante", "Protecteurs de bas de marche (carbone) éclairé(e)", "Système d'assistance de conduite: assistance au démarrage en côte (hill holder)", "Porsche active suspension management (pasm)", "0 litre(s) 290 kw turbo catalyseur", "Cde vocale pour pcm", "Chassis/suspension sport surbaissé(e) (20 mm)", "Étoiles de jantes peint (de couleur différente)", "Bouchon de réservoir finition/aspect alu", "Embout sortie de ceinture pied milieu cuir", "Pack intérieur: bois", "8 litre(s) 390 kw turbo catalyseur", "Rétroviseur ext couverture carbone (sport design)", "Éclairage diurne led 4 points", "Cadre/encadrement combiné d'instruments finition/aspect alu", "Enjoliveurs de vitre aluminium", "Pack suppl. intérieur: façade de commande et panneau de porte cuir", "6 litre(s) 357 kw)", "Equipement int. cuir alcantara", "Moteur 4", "Spoiler ar. couleur caisse", "Protecteurs de bas de marche (aluminium dark silver) éclairé(e)", "Levier de sélection des rapports enjoliveur finition/aspect alu", "Eclaireur de plancher à l'ar", "Cadre/encadrement combiné d'instruments cuir", "Ceinture de sécurité à 6 points coté passager", "Monogramme 911 noir(e)", "Volant de direction (gt sport / race tex) avec multifonctions et palettes changement vitesse", "Volant de direction avec palettes changement vitesse (vareq suppl. pour volant de direction)", "cache peint", "Projecteur principal led compr. porsche dynamic light système plus (pdls+)", "compte tours", "Colonne de direction (volant de direction) à réglages électriques", "Pare soleil avec miroir(s) (éclairé(e))", "Equipement int. cuir brillant", "Sticker / bandes décoratives lat", "E gaz", "Kit de réparation des pneumatiques", "métallisé peint)", "Sièges sport plus dossiers cuir avec dans une couleur différente coutures", "0 litre(s) 386 kw catalyseur", "Réception radio digital(e) (dab+)", "Airbag lat av", "Sièges baquet sport av", "Siège baquet av gauche", "décor cuir", "Volant de direction (gt sport alcantara / race tex) avec palettes changement vitesse", "brossé)", "coutures en couleur contrastante argent)", "Projecteurs bi xénon compr. porsche dynamic light système (pdls)", "Sièges baquets allégés av", "Projecteurs légers", "coutures dans/en/au couleur contrastante)", "Protecteurs de bas de marche (inox) éclairé(e)", "Jantes alliage léger (métallisé peint)", "Sellerie : alcantara / simili cuir", "Grille d'entrée d'air peint", "éclairé(e) (aluminium noir(e)", "Boîte de vitesses 7 rapports boîte automatique à double embrayage (pdk)", "Feux de brouillard ar", "Sound package plus", "Norme de dépollution euro 6e", "Pack suppl. intérieur: façade de commande cuir", "0 litre(s) 383 kw catalyseur", "Éclairage directionnel", "de couleur différente", "Moyeu volant de direction avec coutures de couleur différente (de couleur différente)", "6 litre(s) 331 kw turbo catalyseur", "Rétroviseur ext peint", "Enjoliveurs de vitre noir(e) (brillant)", "Essuie vitre ar.", "8 litre(s) 383 kw turbo catalyseur", "Volant de direction (cuir lisse/sport", "Pack clubsport", "Sièges ar (2 places assises) dossiers ar rabattable", "Airbag tête epaules av (thoraxbag)", "Direction assistée plus (asservie à la vitesse)", "8 litre(s) 412 kw turbo catalyseur", "Batterie légère (lithium ion)", "6 litre(s) 456 kw turbo catalyseur", "étendu sellerie cuir", "Ionisateur d'air", "embout av carbone", "Rétroviseur ext à réglage électrique et dégivrant", "Repose pied finition/aspect sport", "compr. porsche dynamic light système (pdls)", "Levier de sélection cuir", "Pack intérieur: cuir", "padm)", "Dossier ar deux parties", "Siège av gauche à réglages électriques (avec memory)", "Panneau de porte construction allégée", "Sport touche", "matelassé(e) (vareq suppl. vers volant de direction)", "Mode de transmission roues ar motrices", "Pot d'échappement sport", "Porsche torque vectoring (ptv)", "Rétroviseur ext à réglages électriques", "Automatique freins différentiel (abd)", "Moyeux caches porsche couleur", "Rétroviseur ext partie inférieure peint (sport design)", "Pare brise avec antenne", "0 litre(s) 283 kw turbo catalyseur", "Equipement int. cuir nature", "Porsche torque vectoring plus (ptv plus)", "Pack memory conducteur", "Embout sport finition/aspect 4 embouts", "3. feu stop", "Habillages de bas de caisse couleur caisse design sport", "Equipement int. microfibre race tex", "0 litre(s) 272 kw catalyseur", "surteinté", "Sièges sport plus dossiers peint", "Dossier ar fractionné (40:20:40)", "6 litre(s) 353 kw turbo catalyseur", "Habillage de colonne de direction cuir avec dans une couleur différente coutures", "Lave phares (lave projecteurs)", "Arceaux targa noir(e)", "Pare soleil race tex", "Couvercle boite à fusibles cuir", "Commande de capote manuel(le)", "Chargeur à induction pour smartphone (charge sans fil)", "Hardtop (cabriolet)", "4 litre(s) 257 kw catalyseur", "Equipement int. diffuseurs d'air cuir", "Pare brise avec bandeau pare soleil supérieur(e)", "Porsche design subsecond montre", "Dynamique support moteur (porsche active drivetrain mount", "Siège baquet av droit", "Equipement int. équipement de série / race tex", "Porsche management de traction (ptm)", "Sellerie : cuir / alcantara", "feux à LED", "Pack éclairage int / pack design lumière", "Blocage transversal essieu ar mécanique", "Pré équipement téléphone/téléphone mobile avec interface bluetooth", "Rétroviseur ext partie inférieure couleur caisse et pied de rétroviseur noir(e) (finition brillante) peint", "Boîte de vitesses 7 rapports sport boîte automatique à double embrayage (pdk)", "Porsche communications management (pcm) compr. online module de navigation", "Supports isofix pour siège enfant sur siège passager", "8 litre(s) 316 kw catalyseur", "Vehicle tracking system (pvts)", "Allumage automatique pour feux de croisement", "lamelles finition/aspect alu", "6 litre(s) 280 kw catalyseur", "Habillage de bas de caisse int. cuir", "Habillage av. sport design", "Partie inf ar sport design peint (noir(e))", "6 litre(s) 239 kw catalyseur", "Pare soleil cuir", "tons cuir de série", "système d'appel d'urgence", "Gt3 cup", "2 directions)", "Pack sport léger", "Jantes alliage léger (gris", "4 directions)", "0 litre(s) 375 kw catalyseur", "Sièges sport électrique (14 directions) compr. pack memoire", "Afficheur multifonctions / ordinateur de bord", "Services online mobile android auto", "Dispositif antivol pour roues (écrous antivol)", "Phares à matrice de led compr. porsche dynamic light système plus (pdls+)", "Appuie têtes av et ar avec porsche", "Attaché case cuir", "Levier de sélection alcantara / race tex", "Éclairage ambiant garniture de pavillon", "Pack accent argent", "Rétroviseur ext sport design", "Réservoir à carburant: 64 litre(s)", "Combiné d'instruments avec fond noir(e)", "Système d'assistance de conduite: système d'aide au stationnement avec caméra aide au recul", "Siège ventilé av", "Pack intérieur: diamar dark silver", "Monogramme indication de version lat", "Feux ar. non teinté / glace aspect lisse", "noir(e)", "Bouchon de réservoir exclusive design", "(d+g)", "Verrouillage centralisé avec cde radio à distance", "Boîte de vitesses 8 rapports boîte automatique à double embrayage (pdk)", "Equipement int. cuir / tissu", "Sièges sport plus (à réglages électriques", "Surtapis heritage design", "Étriers de frein rouge peint", "Porsche communications management (pcm) compr. dvd module de navigation (étendu)", "8 litre(s) 515 kw turbo catalyseur", "Peinture unie", "8 litre(s) 331 kw catalyseur", "8 litre(s) 427 kw turbo catalyseur", "Bandes décoratives sport automobile", "8 litre(s) 350 kw catalyseur", "8 litre(s) 283 kw catalyseur", "bi ton", "Hybride 523 kw (moteur 3", "Glace triangulaire carbone", "Boîte automatique tiptronic (5 rapports)", "Patère dossier cuir", "Moyeux avec fermeture centrale", "Pack design heritage", "8 litre(s) 397 kw turbo catalyseur", "Système de pédales et repose pied dans finition/aspect sport", "Système audio porsche cdr 30 (radio/lecteur cd)", "Chassis/suspension sport (pasm) à commande électronique", "Système audio porsche cdr 31 (radio/lecteur cd)", "paldao", "Rétroviseur ext asphérique", "Norme de dépollution euro 5", "Accès confort (sans clé déverrouillage de porte)", "Equipement int. enjoliveur façade de commande finition/aspect alu" ], "all_characteristics": { "vehicle": { "co2": { "combined": 233, "reliable": false, "ecoBonusMalus": 0 }, "make": "PORSCHE", "cubic": 2981, "label": "(992) COUPE 3.0 385 CARRERA BVA7", "model": "911", "packs": [ { "name": "Pack intérieur Aluminium brossé" }, { "name": "Pack intérieur Carbone" }, { "name": "Pack intérieur peint" } ], "energy": "ESSENCE", "length": 4519, "critair": { "standardMet": "EURO6", "critairLevel": "1", "isConversionAllowance": false }, "gearbox": "AUTOMATIQUE", "options": [ { "name": "Intérieur cuir" }, { "name": "Intérieur tout cuir" }, { "name": "Peinture spéciale" } ], "category": "COUPE", "powerDin": 385, "standard": "WLTP", "nbOfDoors": 2, "equipments": [ { "label": "Volant cuir", "category": "Intérieur" }, { "label": "Antipatinage", "category": "Sécurité" }, { "label": "Ordinateur de bord", "category": "Intérieur" }, { "label": "Alarme", "category": "Antivol" }, { "label": "ABS", "category": "Sécurité" }, { "label": "Bluetooth", "category": "Intérieur" }, { "label": "Régulateur de vitesse", "category": "Intérieur" }, { "label": "4 roues directrices", "category": "Exterieur et chassis" }, { "label": "Aide parking", "category": "Exterieur et chassis" }, { "label": "Airbag frontal", "category": "Securite" }, { "label": "Anti démarrage", "category": "Antivol" }, { "label": "ASR", "category": "Securite" }, { "label": "Becquet", "category": "Exterieur et chassis" }, { "label": "Caméra de recul", "category": "Interieur" }, { "label": "Carnet d'entretien", "category": "Autre" }, { "label": "Carte main libre", "category": "Interieur" }, { "label": "Climatisation automatique", "category": "Interieur" }, { "label": "Climatisation automatique multi zone", "category": "Interieur" }, { "label": "Contrôle de pression des pneus", "category": "Securite" }, { "label": "Détecteur de pluie", "category": "Securite" }, { "label": "Différentiel autobloquant", "category": "Exterieur et chassis" }, { "label": "Direction assistée", "category": "Interieur" }, { "label": "FAP", "category": "Autre" }, { "label": "Fermeture électrique", "category": "Interieur" }, { "label": "Frein de parking automatique", "category": "Exterieur et chassis" }, { "label": "Jantes alu", "category": "Exterieur et chassis" }, { "label": "Non fumeur", "category": "Autre" }, { "label": "Pack cuir", "category": "Interieur" }, { "label": "Pack sport", "category": "Exterieur et chassis" }, { "label": "Peinture métallisée", "category": "Exterieur et chassis" }, { "label": "Prise audio USB", "category": "Interieur" }, { "label": "Projecteurs bi-xénon", "category": "Exterieur et chassis" }, { "label": "Projecteurs xénon", "category": "Exterieur et chassis" }, { "label": "Sièges électriques", "category": "Interieur" }, { "label": "Suspension sport", "category": "Exterieur et chassis" }, { "label": "Système audio BOSE", "category": "Interieur" }, { "label": "Système audio MP3", "category": "Interieur" }, { "label": "Système Start & Stop", "category": "Autre" }, { "label": "Vitres électriques", "category": "Interieur" }, { "label": "Pack accent noir(e)", "category": "Autre" }, { "label": "Siège chauffant av", "category": "Autre" }, { "label": "6 litre(s) 390 kw turbo catalyseur", "category": "Autre" }, { "label": "Pavillon carbone", "category": "Autre" }, { "label": "Rétroviseur ext noir(e) peint", "category": "Autre" }, { "label": "Sellerie : cuir partiel", "category": "Autre" }, { "label": "Lunette ar. chauffant(e)/dégivrant(e)", "category": "Autre" }, { "label": "Système audio porsche cdr avec ecran tactile couleur (radio/lecteur cd)", "category": "Autre" }, { "label": "Equipement int. enjoliveur façade de commande carbone", "category": "Autre" }, { "label": "Cadran couleur", "category": "Autre" }, { "label": "Pack suppl. intérieur: ar. cuir", "category": "Autre" }, { "label": "Volant de direction (sport 3 branches)", "category": "Autre" }, { "label": "Levier de sélection et poignée de frein à main alcantara", "category": "Autre" }, { "label": "6 litre(s) 254 kw catalyseur", "category": "Autre" }, { "label": "Sticker / bandes décoratives numéro de course", "category": "Autre" }, { "label": "Suppression sièges ar", "category": "Autre" }, { "label": "Restylage fb (option interne)", "category": "Autre" }, { "label": "Vitrage teinté(e)", "category": "Autre" }, { "label": "Voie élargie sur train ar", "category": "Autre" }, { "label": "Système de pédales et repose pied en aluminium", "category": "Autre" }, { "label": "Habillages de bas de caisse peint", "category": "Autre" }, { "label": "capote électrique", "category": "Autre" }, { "label": "avec monogramme individual", "category": "Autre" }, { "label": "Mode de transmission traction intégrale permanente", "category": "Autre" }, { "label": "Equipement int. enjoliveur façade de commande peint", "category": "Autre" }, { "label": "Étriers de frein jaune peint", "category": "Autre" }, { "label": "8 litre(s) 478 kw turbo catalyseur", "category": "Autre" }, { "label": "Equipement int. enjoliveur façade de commande cuir", "category": "Autre" }, { "label": "Support à boissons embout cuir", "category": "Autre" }, { "label": "Combiné d'instruments avec fond argent", "category": "Autre" }, { "label": "Chassis/suspensions surbaissé(e)", "category": "Autre" }, { "label": "Arceau de sécurité noir(e)", "category": "Autre" }, { "label": "Déflecteur d'air électrique", "category": "Autre" }, { "label": "Monogramme porsche peint", "category": "Autre" }, { "label": "0 litre(s) 368 kw catalyseur", "category": "Autre" }, { "label": "Spoiler av. couleur caisse", "category": "Autre" }, { "label": "Boîte de vitesses 6 rapports sport", "category": "Autre" }, { "label": "Pack intérieur coutures dans une couleur différente", "category": "Autre" }, { "label": "Cadran compte tours", "category": "Autre" }, { "label": "Essuie vitres avec capteur de pluie", "category": "Autre" }, { "label": "Monte charge train av", "category": "Autre" }, { "label": "sport chrono chronomètre", "category": "Autre" }, { "label": "Volant de direction (sport/cuir", "category": "Autre" }, { "label": "Rétroviseur ext rabattable électriquement", "category": "Autre" }, { "label": "Système d'airbag crânien (airbag curtain)", "category": "Autre" }, { "label": "Volant de direction chauffant(e)/dégivrant(e) (gt sport / race tex) avec multifonctions et palettes changement vitesse", "category": "Autre" }, { "label": "Garniture de pavillon race tex", "category": "Autre" }, { "label": "Pré équipement vehicle tracking system", "category": "Autre" }, { "label": "Sièges sport av", "category": "Autre" }, { "label": "recouvrements cuir", "category": "Autre" }, { "label": "6 litre(s) 305 kw catalyseur", "category": "Autre" }, { "label": "Norme de dépollution euro 6d temp", "category": "Autre" }, { "label": "Volant de direction (cuir 3 branches) avec palettes changement vitesse", "category": "Autre" }, { "label": "8 litre(s) 368 kw turbo catalyseur", "category": "Autre" }, { "label": "Volant de direction chauffant(e)/dégivrant(e) (gt sport / cuir) avec multifonctions et palettes changement vitesse", "category": "Autre" }, { "label": "Ceintures de sécurité couleur", "category": "Autre" }, { "label": "Système audio porsche cdr 24 (radio/lecteur cd)", "category": "Autre" }, { "label": "filtre à pollen", "category": "Autre" }, { "label": "6 litre(s) 340 kw turbo catalyseur", "category": "Autre" }, { "label": "embout noir(e)", "category": "Autre" }, { "label": "Supports isofix pour siège enfant sur siège ar", "category": "Autre" }, { "label": "décor peint", "category": "Autre" }, { "label": "Adaptatif sièges sport compr. réglage de siège 18 directions et pack memoire", "category": "Autre" }, { "label": "Rétroviseur int cuir", "category": "Autre" }, { "label": "Interface universelle audio", "category": "Autre" }, { "label": "Console centrale ar cuir", "category": "Autre" }, { "label": "Porsche stability management (psm)", "category": "Autre" }, { "label": "6 litre(s) 355 kw turbo catalyseur", "category": "Autre" }, { "label": "Déflecteur spoiler av. couleur caisse", "category": "Autre" }, { "label": "appuis d'aile noir(e)", "category": "Autre" }, { "label": "3 branches) avec multifonctions", "category": "Autre" }, { "label": "Siège av gauche et rétroviseur ext avec fonction mémoire (mémoire conducteur)", "category": "Autre" }, { "label": "Système d'assistance de conduite: assistant maintien de trajectoire", "category": "Autre" }, { "label": "clignotants LED", "category": "Autre" }, { "label": "Equipement int. cuir / sport tex", "category": "Autre" }, { "label": "Monogramme série peint", "category": "Autre" }, { "label": "Volant de direction chauffant(e)/dégivrant(e) (microfibre race tex) avec multifonctions", "category": "Autre" }, { "label": "Moyeu volant de direction et levier de sélection cuir lisse", "category": "Autre" }, { "label": "8 litre(s) 300 kw catalyseur", "category": "Autre" }, { "label": "Chassis/suspensions pour sport automobile réglable", "category": "Autre" }, { "label": "Clés véhicule couleur caisse peint compr. étui cuir", "category": "Autre" }, { "label": "Miroir de courtoisie à l'ar éclairé(e)", "category": "Autre" }, { "label": "Levier de sélection aluminium", "category": "Autre" }, { "label": "Protecteurs de bas de marche noir(e)", "category": "Autre" }, { "label": "0 litre(s) 331 kw catalyseur", "category": "Autre" }, { "label": "Construction allégée et insonorisant vitrage", "category": "Autre" }, { "label": "Equipement int. cuir / race tex", "category": "Autre" }, { "label": "Monogramme 911 couleurs chrome", "category": "Autre" }, { "label": "lamelles cuir", "category": "Autre" }, { "label": "Étriers de frein noir(e) anodisé", "category": "Autre" }, { "label": "Volant de direction (alcantara 3 branches) avec palettes changement vitesse", "category": "Autre" }, { "label": "Dispositif de freinage céramique (porsche ceramic composite brake", "category": "Autre" }, { "label": "8 litre(s) 320 kw catalyseur", "category": "Autre" }, { "label": "Jantes alliage léger (argent", "category": "Autre" }, { "label": "0 litre(s) 353 kw turbo catalyseur", "category": "Autre" }, { "label": "Pack sport chrono avec porsche design subsecond montre", "category": "Autre" }, { "label": "Pack suppl. intérieur: panneau de porte cuir", "category": "Autre" }, { "label": "Sièges sport dossiers cuir", "category": "Autre" }, { "label": "Mode de transmission transmission intégrale", "category": "Autre" }, { "label": "pccb)", "category": "Autre" }, { "label": "Moyeu volant de direction cuir", "category": "Autre" }, { "label": "Targa", "category": "Autre" }, { "label": "8 litre(s) 261 kw catalyseur", "category": "Autre" }, { "label": "Volant de direction chauffant(e)/dégivrant(e) (cuir) avec multifonctions", "category": "Autre" }, { "label": "Gt3 rs", "category": "Autre" }, { "label": "Éclairage ambiant orienté vers l'arrière", "category": "Autre" }, { "label": "Système d'airbag crânien porsche side impact protection system (posip)", "category": "Autre" }, { "label": "7 litre(s) 405 kw turbo catalyseur", "category": "Autre" }, { "label": "Gt2 rs", "category": "Autre" }, { "label": "Projecteur principal led compr. porsche dynamic light système (pdls)", "category": "Autre" }, { "label": "compr. porsche dynamic light système plus (pdls+)", "category": "Autre" }, { "label": "8 litre(s) 294 kw catalyseur", "category": "Autre" }, { "label": "Pack design sport noir(e)", "category": "Autre" }, { "label": "Système d'assistance de conduite: système d'aide au stationnement av et ar compr. caméra aide au recul et surround view", "category": "Autre" }, { "label": "6 litre(s) 471 kw)", "category": "Autre" }, { "label": "Aile av carbone couleur caisse", "category": "Autre" }, { "label": "Garniture de pavillon alcantara", "category": "Autre" }, { "label": "Étriers de frein noir(e) (brillant)", "category": "Autre" }, { "label": "Régulateur du couple d'inertie du moteur (msr)", "category": "Autre" }, { "label": "Sièges baquet av", "category": "Autre" }, { "label": "0 litre(s) 309 kw catalyseur", "category": "Autre" }, { "label": "Arceaux targa platinum éclat soyeux", "category": "Autre" }, { "label": "Moteur 3", "category": "Autre" }, { "label": "Surtapis avec bordure cuir", "category": "Autre" }, { "label": "Rétroviseur ext cache de rétroviseur peint", "category": "Autre" }, { "label": "Aéro kit turbo", "category": "Autre" }, { "label": "Protection volumétrique (système infrarouge)", "category": "Autre" }, { "label": "Arceau de sécurité / cage", "category": "Autre" }, { "label": "Système de freinage renforcé(e)", "category": "Autre" }, { "label": "Volant de direction (gt sport cuir) avec palettes changement vitesse", "category": "Autre" }, { "label": "Colonne de direction (volant de direction) réglable(s)", "category": "Autre" }, { "label": "Déflecteur d'air lat sideblade carbone", "category": "Autre" }, { "label": "Direction assistée à commande électronique (servotronic)", "category": "Autre" }, { "label": "Garniture de pavillon tissu", "category": "Autre" }, { "label": "Appuie têtes av avec porsche", "category": "Autre" }, { "label": "Carrosserie: 2 portes", "category": "Autre" }, { "label": "Hybride 398 kw (moteur 3", "category": "Autre" }, { "label": "Moteur électrique 41 kw (transmission hybride)", "category": "Autre" }, { "label": "Pack touring", "category": "Autre" }, { "label": "embout inox", "category": "Autre" }, { "label": "8 litre(s) 446 kw turbo catalyseur", "category": "Autre" }, { "label": "couvercle compartiment/vide poches cuir avec monogramme spécifique et coutures couleur contrastante", "category": "Autre" }, { "label": "Protecteurs de bas de marche (carbone) éclairé(e)", "category": "Autre" }, { "label": "Système d'assistance de conduite: assistance au démarrage en côte (hill holder)", "category": "Autre" }, { "label": "Porsche active suspension management (pasm)", "category": "Autre" }, { "label": "0 litre(s) 290 kw turbo catalyseur", "category": "Autre" }, { "label": "Cde vocale pour pcm", "category": "Autre" }, { "label": "Chassis/suspension sport surbaissé(e) (20 mm)", "category": "Autre" }, { "label": "Étoiles de jantes peint (de couleur différente)", "category": "Autre" }, { "label": "Bouchon de réservoir finition/aspect alu", "category": "Autre" }, { "label": "Embout sortie de ceinture pied milieu cuir", "category": "Autre" }, { "label": "Pack intérieur: bois", "category": "Autre" }, { "label": "8 litre(s) 390 kw turbo catalyseur", "category": "Autre" }, { "label": "Rétroviseur ext couverture carbone (sport design)", "category": "Autre" }, { "label": "Éclairage diurne led 4 points", "category": "Autre" }, { "label": "Cadre/encadrement combiné d'instruments finition/aspect alu", "category": "Autre" }, { "label": "Enjoliveurs de vitre aluminium", "category": "Autre" }, { "label": "Pack suppl. intérieur: façade de commande et panneau de porte cuir", "category": "Autre" }, { "label": "6 litre(s) 357 kw)", "category": "Autre" }, { "label": "Equipement int. cuir alcantara", "category": "Autre" }, { "label": "Moteur 4", "category": "Autre" }, { "label": "Spoiler ar. couleur caisse", "category": "Autre" }, { "label": "Protecteurs de bas de marche (aluminium dark silver) éclairé(e)", "category": "Autre" }, { "label": "Levier de sélection des rapports enjoliveur finition/aspect alu", "category": "Autre" }, { "label": "Eclaireur de plancher à l'ar", "category": "Autre" }, { "label": "Cadre/encadrement combiné d'instruments cuir", "category": "Autre" }, { "label": "Ceinture de sécurité à 6 points coté passager", "category": "Autre" }, { "label": "Monogramme 911 noir(e)", "category": "Autre" }, { "label": "Volant de direction (gt sport / race tex) avec multifonctions et palettes changement vitesse", "category": "Autre" }, { "label": "Volant de direction avec palettes changement vitesse (vareq suppl. pour volant de direction)", "category": "Autre" }, { "label": "cache peint", "category": "Autre" }, { "label": "Projecteur principal led compr. porsche dynamic light système plus (pdls+)", "category": "Autre" }, { "label": "compte tours", "category": "Autre" }, { "label": "Colonne de direction (volant de direction) à réglages électriques", "category": "Autre" }, { "label": "Pare soleil avec miroir(s) (éclairé(e))", "category": "Autre" }, { "label": "Equipement int. cuir brillant", "category": "Autre" }, { "label": "Sticker / bandes décoratives lat", "category": "Autre" }, { "label": "E gaz", "category": "Autre" }, { "label": "Kit de réparation des pneumatiques", "category": "Autre" }, { "label": "métallisé peint)", "category": "Autre" }, { "label": "Sièges sport plus dossiers cuir avec dans une couleur différente coutures", "category": "Autre" }, { "label": "0 litre(s) 386 kw catalyseur", "category": "Autre" }, { "label": "Réception radio digital(e) (dab+)", "category": "Autre" }, { "label": "Airbag lat av", "category": "Autre" }, { "label": "Sièges baquet sport av", "category": "Autre" }, { "label": "Siège baquet av gauche", "category": "Autre" }, { "label": "décor cuir", "category": "Autre" }, { "label": "Volant de direction (gt sport alcantara / race tex) avec palettes changement vitesse", "category": "Autre" }, { "label": "brossé)", "category": "Autre" }, { "label": "coutures en couleur contrastante argent)", "category": "Autre" }, { "label": "Projecteurs bi xénon compr. porsche dynamic light système (pdls)", "category": "Autre" }, { "label": "Sièges baquets allégés av", "category": "Autre" }, { "label": "Projecteurs légers", "category": "Autre" }, { "label": "coutures dans/en/au couleur contrastante)", "category": "Autre" }, { "label": "Protecteurs de bas de marche (inox) éclairé(e)", "category": "Autre" }, { "label": "Jantes alliage léger (métallisé peint)", "category": "Autre" }, { "label": "Sellerie : alcantara / simili cuir", "category": "Autre" }, { "label": "Grille d'entrée d'air peint", "category": "Autre" }, { "label": "éclairé(e) (aluminium noir(e)", "category": "Autre" }, { "label": "Boîte de vitesses 7 rapports boîte automatique à double embrayage (pdk)", "category": "Autre" }, { "label": "Feux de brouillard ar", "category": "Autre" }, { "label": "Sound package plus", "category": "Autre" }, { "label": "Norme de dépollution euro 6e", "category": "Autre" }, { "label": "Pack suppl. intérieur: façade de commande cuir", "category": "Autre" }, { "label": "0 litre(s) 383 kw catalyseur", "category": "Autre" }, { "label": "Éclairage directionnel", "category": "Autre" }, { "label": "de couleur différente", "category": "Autre" }, { "label": "Moyeu volant de direction avec coutures de couleur différente (de couleur différente)", "category": "Autre" }, { "label": "6 litre(s) 331 kw turbo catalyseur", "category": "Autre" }, { "label": "Rétroviseur ext peint", "category": "Autre" }, { "label": "Enjoliveurs de vitre noir(e) (brillant)", "category": "Autre" }, { "label": "Essuie vitre ar.", "category": "Autre" }, { "label": "8 litre(s) 383 kw turbo catalyseur", "category": "Autre" }, { "label": "Volant de direction (cuir lisse/sport", "category": "Autre" }, { "label": "Pack clubsport", "category": "Autre" }, { "label": "Sièges ar (2 places assises) dossiers ar rabattable", "category": "Autre" }, { "label": "Airbag tête epaules av (thoraxbag)", "category": "Autre" }, { "label": "Direction assistée plus (asservie à la vitesse)", "category": "Autre" }, { "label": "8 litre(s) 412 kw turbo catalyseur", "category": "Autre" }, { "label": "Batterie légère (lithium ion)", "category": "Autre" }, { "label": "6 litre(s) 456 kw turbo catalyseur", "category": "Autre" }, { "label": "étendu sellerie cuir", "category": "Autre" }, { "label": "Ionisateur d'air", "category": "Autre" }, { "label": "embout av carbone", "category": "Autre" }, { "label": "Rétroviseur ext à réglage électrique et dégivrant", "category": "Autre" }, { "label": "Repose pied finition/aspect sport", "category": "Autre" }, { "label": "compr. porsche dynamic light système (pdls)", "category": "Autre" }, { "label": "Levier de sélection cuir", "category": "Autre" }, { "label": "Pack intérieur: cuir", "category": "Autre" }, { "label": "padm)", "category": "Autre" }, { "label": "Dossier ar deux parties", "category": "Autre" }, { "label": "Siège av gauche à réglages électriques (avec memory)", "category": "Autre" }, { "label": "Panneau de porte construction allégée", "category": "Autre" }, { "label": "Sport touche", "category": "Autre" }, { "label": "matelassé(e) (vareq suppl. vers volant de direction)", "category": "Autre" }, { "label": "Mode de transmission roues ar motrices", "category": "Autre" }, { "label": "Pot d'échappement sport", "category": "Autre" }, { "label": "Porsche torque vectoring (ptv)", "category": "Autre" }, { "label": "Rétroviseur ext à réglages électriques", "category": "Autre" }, { "label": "Automatique freins différentiel (abd)", "category": "Autre" }, { "label": "Moyeux caches porsche couleur", "category": "Autre" }, { "label": "Rétroviseur ext partie inférieure peint (sport design)", "category": "Autre" }, { "label": "Pare brise avec antenne", "category": "Autre" }, { "label": "0 litre(s) 283 kw turbo catalyseur", "category": "Autre" }, { "label": "Equipement int. cuir nature", "category": "Autre" }, { "label": "Porsche torque vectoring plus (ptv plus)", "category": "Autre" }, { "label": "Pack memory conducteur", "category": "Autre" }, { "label": "Embout sport finition/aspect 4 embouts", "category": "Autre" }, { "label": "3. feu stop", "category": "Autre" }, { "label": "Habillages de bas de caisse couleur caisse design sport", "category": "Autre" }, { "label": "Equipement int. microfibre race tex", "category": "Autre" }, { "label": "0 litre(s) 272 kw catalyseur", "category": "Autre" }, { "label": "surteinté", "category": "Autre" }, { "label": "Sièges sport plus dossiers peint", "category": "Autre" }, { "label": "Dossier ar fractionné (40:20:40)", "category": "Autre" }, { "label": "6 litre(s) 353 kw turbo catalyseur", "category": "Autre" }, { "label": "Habillage de colonne de direction cuir avec dans une couleur différente coutures", "category": "Autre" }, { "label": "Lave phares (lave projecteurs)", "category": "Autre" }, { "label": "Arceaux targa noir(e)", "category": "Autre" }, { "label": "Pare soleil race tex", "category": "Autre" }, { "label": "Couvercle boite à fusibles cuir", "category": "Autre" }, { "label": "Commande de capote manuel(le)", "category": "Autre" }, { "label": "Chargeur à induction pour smartphone (charge sans fil)", "category": "Autre" }, { "label": "Hardtop (cabriolet)", "category": "Autre" }, { "label": "4 litre(s) 257 kw catalyseur", "category": "Autre" }, { "label": "Equipement int. diffuseurs d'air cuir", "category": "Autre" }, { "label": "Pare brise avec bandeau pare soleil supérieur(e)", "category": "Autre" }, { "label": "Porsche design subsecond montre", "category": "Autre" }, { "label": "Dynamique support moteur (porsche active drivetrain mount", "category": "Autre" }, { "label": "Siège baquet av droit", "category": "Autre" }, { "label": "Equipement int. équipement de série / race tex", "category": "Autre" }, { "label": "Porsche management de traction (ptm)", "category": "Autre" }, { "label": "Sellerie : cuir / alcantara", "category": "Autre" }, { "label": "feux à LED", "category": "Autre" }, { "label": "Pack éclairage int / pack design lumière", "category": "Autre" }, { "label": "Blocage transversal essieu ar mécanique", "category": "Autre" }, { "label": "Pré équipement téléphone/téléphone mobile avec interface bluetooth", "category": "Autre" }, { "label": "Rétroviseur ext partie inférieure couleur caisse et pied de rétroviseur noir(e) (finition brillante) peint", "category": "Autre" }, { "label": "Boîte de vitesses 7 rapports sport boîte automatique à double embrayage (pdk)", "category": "Autre" }, { "label": "Porsche communications management (pcm) compr. online module de navigation", "category": "Autre" }, { "label": "Supports isofix pour siège enfant sur siège passager", "category": "Autre" }, { "label": "8 litre(s) 316 kw catalyseur", "category": "Autre" }, { "label": "Vehicle tracking system (pvts)", "category": "Autre" }, { "label": "Allumage automatique pour feux de croisement", "category": "Autre" }, { "label": "lamelles finition/aspect alu", "category": "Autre" }, { "label": "6 litre(s) 280 kw catalyseur", "category": "Autre" }, { "label": "Habillage de bas de caisse int. cuir", "category": "Autre" }, { "label": "Habillage av. sport design", "category": "Autre" }, { "label": "Partie inf ar sport design peint (noir(e))", "category": "Autre" }, { "label": "6 litre(s) 239 kw catalyseur", "category": "Autre" }, { "label": "Pare soleil cuir", "category": "Autre" }, { "label": "tons cuir de série", "category": "Autre" }, { "label": "système d'appel d'urgence", "category": "Autre" }, { "label": "Gt3 cup", "category": "Autre" }, { "label": "2 directions)", "category": "Autre" }, { "label": "Pack sport léger", "category": "Autre" }, { "label": "Jantes alliage léger (gris", "category": "Autre" }, { "label": "4 directions)", "category": "Autre" }, { "label": "0 litre(s) 375 kw catalyseur", "category": "Autre" }, { "label": "Sièges sport électrique (14 directions) compr. pack memoire", "category": "Autre" }, { "label": "Afficheur multifonctions / ordinateur de bord", "category": "Autre" }, { "label": "Services online mobile android auto", "category": "Autre" }, { "label": "Dispositif antivol pour roues (écrous antivol)", "category": "Autre" }, { "label": "Phares à matrice de led compr. porsche dynamic light système plus (pdls+)", "category": "Autre" }, { "label": "Appuie têtes av et ar avec porsche", "category": "Autre" }, { "label": "Attaché case cuir", "category": "Autre" }, { "label": "Levier de sélection alcantara / race tex", "category": "Autre" }, { "label": "Éclairage ambiant garniture de pavillon", "category": "Autre" }, { "label": "Pack accent argent", "category": "Autre" }, { "label": "Rétroviseur ext sport design", "category": "Autre" }, { "label": "Réservoir à carburant: 64 litre(s)", "category": "Autre" }, { "label": "Combiné d'instruments avec fond noir(e)", "category": "Autre" }, { "label": "Système d'assistance de conduite: système d'aide au stationnement avec caméra aide au recul", "category": "Autre" }, { "label": "Siège ventilé av", "category": "Autre" }, { "label": "Pack intérieur: diamar dark silver", "category": "Autre" }, { "label": "Monogramme indication de version lat", "category": "Autre" }, { "label": "Feux ar. non teinté / glace aspect lisse", "category": "Autre" }, { "label": "noir(e)", "category": "Autre" }, { "label": "Bouchon de réservoir exclusive design", "category": "Autre" }, { "label": "(d+g)", "category": "Autre" }, { "label": "Verrouillage centralisé avec cde radio à distance", "category": "Autre" }, { "label": "Boîte de vitesses 8 rapports boîte automatique à double embrayage (pdk)", "category": "Autre" }, { "label": "Equipement int. cuir / tissu", "category": "Autre" }, { "label": "Sièges sport plus (à réglages électriques", "category": "Autre" }, { "label": "Surtapis heritage design", "category": "Autre" }, { "label": "Étriers de frein rouge peint", "category": "Autre" }, { "label": "Porsche communications management (pcm) compr. dvd module de navigation (étendu)", "category": "Autre" }, { "label": "8 litre(s) 515 kw turbo catalyseur", "category": "Autre" }, { "label": "Peinture unie", "category": "Autre" }, { "label": "8 litre(s) 331 kw catalyseur", "category": "Autre" }, { "label": "8 litre(s) 427 kw turbo catalyseur", "category": "Autre" }, { "label": "Bandes décoratives sport automobile", "category": "Autre" }, { "label": "8 litre(s) 350 kw catalyseur", "category": "Autre" }, { "label": "8 litre(s) 283 kw catalyseur", "category": "Autre" }, { "label": "bi ton", "category": "Autre" }, { "label": "Hybride 523 kw (moteur 3", "category": "Autre" }, { "label": "Glace triangulaire carbone", "category": "Autre" }, { "label": "Boîte automatique tiptronic (5 rapports)", "category": "Autre" }, { "label": "Patère dossier cuir", "category": "Autre" }, { "label": "Moyeux avec fermeture centrale", "category": "Autre" }, { "label": "Pack design heritage", "category": "Autre" }, { "label": "8 litre(s) 397 kw turbo catalyseur", "category": "Autre" }, { "label": "Système de pédales et repose pied dans finition/aspect sport", "category": "Autre" }, { "label": "Système audio porsche cdr 30 (radio/lecteur cd)", "category": "Autre" }, { "label": "Chassis/suspension sport (pasm) à commande électronique", "category": "Autre" }, { "label": "Système audio porsche cdr 31 (radio/lecteur cd)", "category": "Autre" }, { "label": "paldao", "category": "Autre" }, { "label": "Rétroviseur ext asphérique", "category": "Autre" }, { "label": "Norme de dépollution euro 5", "category": "Autre" }, { "label": "Accès confort (sans clé déverrouillage de porte)", "category": "Autre" }, { "label": "Equipement int. enjoliveur façade de commande finition/aspect alu", "category": "Autre" } ], "consumption": { "combined": 10.3, "reliable": false }, "externalColor": "gris", "internalColor": "cuir", "maxTrunkVolume": 132, "commercialModel": "911", "seatingCapacity": 4, "firstTrafficDate": "2024-10-07", "fiscalHorsePower": 27 }, "classified": { "year": "2024", "price": 154990, "title": "PORSCHE 911 TYPE 992", "status": "ONLINE", "mileage": 10930, "zipCode": "06800", "firstHand": true, "mappingId": "MDQ1MTEyNzYyMQ==", "reference": "E118586883", "visitPlace": "06", "description": {}, "customerType": "PRO", "mileageBadge": "MEDIUM_MILEAGE", "referencePro": "16", "goodDealBadge": "BAD_DEAL", "averageMileage": 11151, "priceVariation": { "prices": { "current": 154990, "history": [ 154990, 154990 ], "initial": 154990, "isDropping": false, "percentage": 0, "isPriceCrossed": false }, "isAgeCapped": false, "displayedAge": 2 }, "refinedQuotation": 126805, "reliabilityIndex": 3, "customerReference": "C060750", "ownerCorrelationId": "C060750", "publicationEndDate": "2999-01-01T00:00:00Z", "constructorWarranty": { "endDate": "2026-10-06", "duration": 24 } } }, "options_list": [ "Intérieur cuir", "Intérieur tout cuir", "Peinture spéciale" ], "seller_address": "38 CHEMIN DU VALLON DES VAUX, CAGNES-SUR-MER", "seller_postal_code": "06800", "seller_name": "MOTORSPORT BY TB", "seller_category": "INTERMEDIAIRE", "seller_company_creation_date": "2026-03-11T15:43:25+00:00", "is_verified_seller": false, "seller_comment": null, "vehicle_rating_link": "/cote-auto-porsche-911-(992)+coupe+3.0+385+carrera+bva7-2024.html?km=10930&price=154990&zip-code=06800&version-id=26428228&modelCom=911+type+992&ref=69118586883"ation=126805&trustIndex=3", "autoviza_history_link": null, "technical_specifications_link": "/fiche-technique-voiture-porsche-911-(992)+coupe+3.0+385+carrera+bva7-2024.html?version-id=26428228&modelCom=911+type+992", "co2_emissions": 233.0, "fiscal_power": 27.0, "engine_power_hp": 385.0, "number_of_seats": 4, "cylinder_capacity": 2981.0, "battery_consumption": null, "battery_capacity": null, "electric_range": null, "is_plug_in_hybrid": null, "vehicle_length": 4519, "max_trunk_volume": 132, "first_traffic_date": "2024-10-06", "critair_level": "1", "euro_standard": "EURO6", "price_variation": { "prices": { "current": 154990, "history": [ 154990, 154990 ], "initial": 154990, "isDropping": false, "percentage": 0, "isPriceCrossed": false }, "isAgeCapped": false, "displayedAge": 2 }, "average_mileage_for_year": 11151, "warranty_months": 24, "warranty_end_date": "2026-10-05", "is_first_hand": true, "number_of_owners": null, "mapping_id": "MDQ1MTEyNzYyMQ==", "functions": null, "native_id": 52300 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/lacentrale-cars-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the LaCentrale Cars Scraper settings Configure your LaCentrale Cars Scraper squid settings. Control pagination, result limits, time filters, and whether to fetch detailed listing information. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 347 | Maximum pages to scrape per task (max: 347) | | **max\_results** | integer | unlimited | Maximum results per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `first_online_date`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **get\_listing\_details** | boolean | true | Fetch detailed listing info (equipment, seller details) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Listing Details Option When `get_listing_details` is enabled, the scraper visits each listing page to extract: * Full equipment list and options * Seller details (address, company info) * Technical specifications (CO2, power, fuel consumption) * Vehicle history links **Pricing:** 4 credits per listing when details are enabled. ## Fetch Since Filter Use `fetch_since` to monitor new inventory. For example, setting `fetch_since: 24h` will stop scraping when it reaches listings older than 24 hours (based on `first_online_date`). Perfect for daily monitoring of new car listings. Set `get_listing_details: false` if you only need basic listing data to reduce costs. Enabling `get_listing_details` costs 4 additional credits per listing. Plan accordingly for large scrapes. Use `fetch_since: 12` for twice-daily monitoring to catch new listings without duplicates. **Backward compatibility:** The old parameter name `annonce_details` is still accepted but deprecated. Migrate to `get_listing_details`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LaCentrale Cars Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 50, "fetch_since": "7d", "get_listing_details": true } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings payload = { "name": "LaCentrale Cars Scraper (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 50, # Limit pages to scrape "fetch_since": "7d", # Only listings from last 24 hours "get_listing_details": True # Fetch detailed listing info } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "LaCentrale Cars Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 50, "fetch_since": "7d", "get_listing_details": true } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/lacentrale-listing-status-checker/add-tasks POST https://api.lobstr.io/v1/tasks Add LaCentrale listing URLs to check their status Add LaCentrale listing URLs to your **LaCentrale Listing Status Checker** squid. Each task checks whether the listing is still active or has been deactivated or expired. Crawler ID: `1d7fbb550feb1cf93e3e439039bcd687` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task must include a `url` field. ## Task Fields LaCentrale listing URL. Example: `https://www.lacentrale.fr/auto-occasion-annonce-66103802227.html` Only `auto-occasion-annonce` URLs are supported. The URL must match the pattern `lacentrale.fr/auto-occasion-annonce-{id}.html`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.lacentrale.fr/auto-occasion-annonce-66103802227.html" }, { "url": "https://www.lacentrale.fr/auto-occasion-annonce-66104112345.html" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" listing_urls = [ "https://www.lacentrale.fr/auto-occasion-annonce-66103802227.html", "https://www.lacentrale.fr/auto-occasion-annonce-66104112345.html", ] response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [{"url": url} for url in listing_urls] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2026-06-02T10:00:00.000000", "is_active": true, "params": { "url": "https://www.lacentrale.fr/auto-occasion-annonce-66103802227.html" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/lacentrale-listing-status-checker/credit-cost Credit cost for the LaCentrale Listing Status Checker 1 credit per listing # Get Results Source: https://docs.lobstr.io/examples/lacentrale-listing-status-checker/get-results GET https://api.lobstr.io/v1/results Retrieve status check results from LaCentrale Listing Status Checker Retrieve status check results from your **LaCentrale Listing Status Checker** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: LaCentrale listing URL that was checked. Example: `https://www.lacentrale.fr/auto-occasion-annonce-66103802227.html` Listing status: `active` or `deactivated`. Example: `active` HTTP status code returned by LaCentrale. `200` = active, `404`/`410` = deactivated or expired. Example: `200` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 81123, "object": "result", "squid": "2c7e9144973963a1e1bede62ac7e60ef", "run": "f454b74115e20e4aca88312cd76d035c", "url": "https://www.lacentrale.fr/auto-occasion-annonce-66103802227.html", "status": "active", "status_code": 200, "functions": null, "native_id": 81123 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/lacentrale-listing-status-checker/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the LaCentrale Listing Status Checker settings Configure your **LaCentrale Listing Status Checker** squid settings. This scraper has no scraper-specific parameters beyond a global run limit. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Set a high concurrency value to check large batches of listing URLs quickly. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LaCentrale Listing Status Checker (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_unique_results_per_run": 1000 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "LaCentrale Listing Status Checker (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_unique_results_per_run": 1000 } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "LaCentrale Listing Status Checker (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_unique_results_per_run": 1000 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-auto-message-sender/add-tasks POST https://api.lobstr.io/v1/tasks Add Leboncoin listing URLs to send automated messages Add Leboncoin listing URLs to send automated messages to sellers. Each task represents a listing that will receive your templated message. Unlike search export scrapers, this tool takes direct listing URLs rather than search result pages. You can obtain listing URLs from the Leboncoin Listings Search Export scraper results. Crawler ID: `fa9c988768a3d61f358916400f3c4b65` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Leboncoin Auto Message Sender crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Direct Leboncoin listing URL (e.g., `https://www.leboncoin.fr/ad/locations/2943434204`) | Use the Leboncoin Listings Search Export scraper to collect listing URLs, then pass them to this tool for messaging. Ensure you have configured your message template in the squid settings before adding tasks. Messages are only sent to listings where the seller has messaging enabled. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "url": "https://www.leboncoin.fr/ad/locations/2943434204" } ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Leboncoin listing URLs to send messages to response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "tasks": [ {"url": "https://www.leboncoin.fr/ad/locations/2943434204"} ], "squid": squid_id } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "bbeff62182c6239a8df533ec9d281c2e", "created_at": "2025-07-04T04:57:45.202264", "is_active": true, "params": { "url": "https://www.leboncoin.fr/ad/locations/2943434204" }, "module": 103, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-auto-message-sender/credit-cost Credit cost for the Leboncoin Auto Message Sender 20 credits per message sent. # Get Results Source: https://docs.lobstr.io/examples/leboncoin-auto-message-sender/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Leboncoin Auto Message Sender Retrieve scraped data from your **Leboncoin Auto Message Sender** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique internal identifier for the message record. Example: `1` Unique identifier for the Leboncoin listing this message was sent to. Example: `3165893393` Direct URL to the listing on Leboncoin. Example: `https://www.leboncoin.fr/ad/ventes_immobilieres/3165893393` Text content of the message sent to the seller. Example: \`Hello toutong972, Je viens de voir votre article qui porte le nom: Terrain à vendre Plassac 970M2 L'offre m'intéresse? Est-ce que vous pouvez me recontacter via la messagerie leboncoin? A très vite, Sasha\` Internal hash used to uniquely identify this message Whether the seller's Leboncoin account has been deactivated. Example: `false` Whether the message was successfully sent. Example: `false` Whether this message was already sent in a previous run. Example: `false` Last publication date of the associated listing. Example: `2026-03-21T21:10:58+00:00` Internal hash used to deduplicate messages across runs. Example: `1679091c5a880faf6fb5e6087eb1b2dc` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 1, "object": "result", "squid": "0edb27ee3753f6a9cc04fe723532f667", "run": "b4c057e086be2a3bb9a11bff058d7728", "annonce_id": "3165893393", "url": "https://www.leboncoin.fr/ad/ventes_immobilieres/3165893393", "message": "Hello toutong972,\n\nJe viens de voir votre article qui porte le nom:\nTerrain à vendre Plassac 970M2\n\nL'offre m'intéresse?\nEst-ce que vous pouvez me recontacter via la messagerie leboncoin?\n\nA très vite,\nSasha", "message_hash": "", "is_deactivated": false, "is_sent": false, "was_already_sent": false, "last_publication_date": "2026-03-21T21:10:58+00:00", "hash_value": "1679091c5a880faf6fb5e6087eb1b2dc", "functions": null, "native_id": 12856 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-auto-message-sender/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Leboncoin Auto Message Sender settings and message template Configure your Leboncoin Auto Message Sender settings including the message template with dynamic variables that are replaced with listing-specific values. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Message Parameters Configure the message content and targeting: | Parameter | Type | Default | Description | | - | - | - | - | | **message** | string | — | Template for the message sent to sellers. Supports dynamic variables (see below) | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `last_publication_date`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **max\_results** | integer | null | Maximum number of listings to process before stopping | | **max\_unique\_results\_per\_run** | integer | null | Maximum unique results across all tasks in a single run | ## Message Template Variables The message parameter supports dynamic variables that are replaced with listing-specific values: | Variable | Description | | - | - | | **#title#** | The listing title (e.g., "Appartement 3 pièces 88 m²") | | **#pseudo#** | The seller's display name/pseudonym | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel message sending threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Example message template: "Hello #pseudo#,\n\nI am interested in your listing: #title#.\n\nPlease contact me via Leboncoin messaging.\n\nThank you!" Keep concurrency low (1-2) to avoid rate limiting from Leboncoin. The same message will not be sent twice to the same listing (duplicate detection via message\_hash). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Leboncoin Auto Message Sender (4)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "message": "Hello #pseudo#,\n\nI want to enquire about #title#.", "fetch_since": 1, "max_results": 3, "max_unique_results_per_run": 10 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Configure message template and settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Leboncoin Auto Message Sender (4)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { # Message template with dynamic variables "message": "Hello #pseudo#,\n\nI want to enquire about #title#.", "fetch_since": 1, # Only listings from last hour "max_results": 3, # Process max 3 listings "max_unique_results_per_run": 10 # Max 10 per run } } ) print(response.json()) ``` ## Response ```json 201 theme={null} { "name": "Leboncoin Auto Message Sender (4)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "message": "Hello #pseudo#,\n\nI want to enquire about #title#.", "max_unique_results_per_run": 20, "fetch_since": 1, "max_results": 3 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-boutique/add-tasks POST https://api.lobstr.io/v1/tasks Add Leboncoin boutique directory URLs to scrape Add Leboncoin boutique directory URLs to your **Leboncoin Boutiques Scraper** squid. Each task should be a Leboncoin boutiques category URL. Crawler ID: `c6e88128aef71c079e58f0518687e10c` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Leboncoin Boutiques Scraper | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | A Leboncoin boutiques directory URL (e.g. `/boutiques/vehicules/toutes_categories` or `/boutiques/immobilier/toutes_categories`) | Browse to a Leboncoin boutiques category page, then copy the path (e.g. `/boutiques/vehicules/toutes_categories`). You can also pass the full URL. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "/boutiques/vehicules/toutes_categories" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "squid": squid_id, "tasks": [ {"url": "/boutiques/vehicules/toutes_categories"}, {"url": "/boutiques/immobilier/toutes_categories"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "created_at": "2026-06-09T10:00:00.000000", "is_active": true, "params": { "url": "/boutiques/vehicules/toutes_categories" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-boutique/credit-cost Credit cost for the Leboncoin Boutiques Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Boutique | 1 | 1 credit per boutique | | Get Boutique Details | 2 | 2 credits per boutique | | Get Phone Numbers | 6 | 6 credits per phone found. No phone found = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/leboncoin-boutique/get-results GET https://api.lobstr.io/v1/results Retrieve scraped store data from Leboncoin Boutiques Scraper Retrieve scraped store data from your **Leboncoin Boutiques Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique store ID on Leboncoin. Store display name. Example: `Auto Elite Paris` URL of the store's Leboncoin page. Phone number of the store. Populated when `get_phone_numbers` is enabled. Whether the phone number is a French mobile number (starts with 06 or 07). Whether a phone number is publicly available for the store. Date the store was registered on Leboncoin. Example: `2018-03-15T00:00:00Z` Street address of the store. Populated when `get_details` is enabled. Postal code. Example: `75008` City. Example: `Paris` Department code. Example: `75` Department name. Example: `Paris` Region code. Example: `11` Region name. Example: `Île-de-France` GPS latitude of the store. Populated when `get_details` is enabled. GPS longitude of the store. Populated when `get_details` is enabled. SIREN number (9-digit French company identifier). Populated when `get_details` is enabled. SIRET number (14-digit French establishment identifier). Populated when `get_details` is enabled. Store slogan as shown on their Leboncoin page. Store description. Populated when `get_details` is enabled. Opening hours text. Populated when `get_details` is enabled. Average Google rating. Example: `4.7` Number of ratings. Example: `312` URL of the store's logo image. Business sector. Example: `vehicles` Numeric sector ID. Whether the store address is hidden on their public page. Whether the contact form is hidden on their public page. Owner UUID on Leboncoin. ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 81595, "object": "result", "squid": "54fc6a2a0fcad579aa37da48ab1085c2", "run": "dab2c43091ea6e1677f9f6427ce9fb14", "online_store_id": "2599946", "online_store_name": "ACL RENAULT", "url": "https://www.leboncoin.fr/boutique/2599946/acl_renault.htm", "phone": "0561787878", "is_mobile": false, "has_phone": true, "active_since": "2011-11-24T00:00:00", "address": "3 Route d'Aussonne", "zipcode": "31700", "city": "Cornebarrieu", "department": "31", "department_label": "Haute-Garonne", "region": "16", "region_label": "Midi-Pyrénées", "lat": 43.65559, "lng": 1.32267, "siren": "485064760", "siret": "48506476000039", "slogan": "Achat et vente de véhicules", "description": "Tous nos véhicules sont disponibles sur notre parc.", "opening_hours": "Du lundi au vendredi : 8h00 - 18h00", "rating_value": 4.5, "rating_count": 138, "logo_url": "https://img.leboncoin.fr/api/v1/lbcpb1/images/4c/81/9f/4c819f72-8166-421e-9755-e801e785da5d?rule=bo-tiny", "sector": "vehicles", "sector_id": 1, "hide_address": false, "hide_contact_form": false, "user_id": "d54740a9-215e-4c8a-a1cc-bd124f3b4c3f", "functions": null, "native_id": 81595 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-boutique/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Leboncoin Boutiques Scraper settings Configure your **Leboncoin Boutiques Scraper** squid settings. Enable enrichment functions to collect additional store details, phone numbers, and business registration data. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **get\_details** | boolean | true | Fetch full store data: address, SIREN/SIRET, GPS coordinates, opening hours, description, and ratings (1 credit per store) | | **get\_phone\_numbers** | boolean | true | Retrieve phone numbers for each store. No account required (1 credit per store) | | **max\_results** | integer | unlimited | Maximum stores collected per URL | | **max\_pages** | integer | 99 | Maximum number of pages to crawl per URL | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Enabling `get_details` or `get_phone_numbers` adds an extra request per store, increasing run time and credit usage. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Leboncoin Boutiques Scraper (1)", "concurrency": 2, "export_unique_results": true, "to_complete": true, "params": { "get_details": true, "get_phone_numbers": true, "max_results": 500, "max_pages": 10 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Leboncoin Boutiques Scraper (1)", "concurrency": 2, "export_unique_results": True, "to_complete": True, "params": { "get_details": True, "get_phone_numbers": True, "max_results": 500, "max_pages": 10 } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Leboncoin Boutiques Scraper (1)", "concurrency": 2, "export_unique_results": true, "to_complete": true, "params": { "get_details": true, "get_phone_numbers": true, "max_results": 500, "max_pages": 10 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-iter-listings-with-phone/add-tasks POST https://api.lobstr.io/v1/tasks Add Leboncoin search URLs to scrape listings with phone numbers Add Leboncoin search result pages to scrape by providing search URLs. This scraper extracts all classified listings including phone numbers when available. This scraper is identical to Leboncoin Listings Search Export but adds phone number extraction capabilities. Crawler ID: `7bc4acdb18f2b90fdd5eb42b8e8251e9` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Leboncoin Listings & Phone Search Export crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Leboncoin search URL (e.g., `https://www.leboncoin.fr/annonces/offres/provence_alpes_cote_d_azur/`) | Apply filters on Leboncoin first, then copy the URL. All filter parameters will be preserved. Phone extraction requires enabling `functions.get_phone_numbers` in the settings and incurs extra credits. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "url": "https://www.leboncoin.fr/annonces/offres/provence_alpes_cote_d_azur/bouches_du_rhone/p-2" } ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Leboncoin search URLs to scrape with phone extraction response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "tasks": [ {"url": "https://www.leboncoin.fr/annonces/offres/provence_alpes_cote_d_azur/bouches_du_rhone/p-2"} ], "squid": squid_id } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "bbeff62182c6239a8df533ec9d281c2e", "created_at": "2025-07-04T04:57:45.202264", "is_active": true, "params": { "url": "https://www.leboncoin.fr/annonces/offres/provence_alpes_cote_d_azur/bouches_du_rhone/p-2" }, "module": 103, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-iter-listings-with-phone/credit-cost Credit cost for the Leboncoin Listings & Phone Search Export | Function | Cost (credits) | Notes | | - | - | - | | Export Listings (No Phone) | 4 | 4 credits per listing. | | Get Phone Numbers | 6 | 6 credits per phone found. No phone found = 0 credits. | | Get Seller Profile | 4 | 4 credits per profile | # Get Results Source: https://docs.lobstr.io/examples/leboncoin-iter-listings-with-phone/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Leboncoin Listings & Phone Search Export Retrieve scraped data from your **Leboncoin Listings & Phone Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the listing on Leboncoin. Example: `3066299454` Title of the listing as posted on Leboncoin. Example: `Villa 5 pièces 105 m²` Listed price of the item or property. Example: `1669` Direct URL to the listing on Leboncoin. Example: `https://www.leboncoin.fr/ad/locations/3066299454` Full description text of the listing. Example: \`Villa 5 pièces 105 m² Dans bel environnement, A LOUER VELAUX, Villa meublée type 5 d'une surface habitable de 104,89 m² sur terrain de 1100 m². RDC : pièce principale comprenant cuisine équipée américaine donnant sur salon/salle à manger avec cheminée, deux chambres/placards ,une salle de bains avec douche et baignoire, un WC. 1er étage : une chambre en mezzanine. Terrasse - Garage/buanderie - Climatisation réversible. Disponible le 26/10/2025 Surface : 105 m² Loyer : 1669 € / mois (charges comprises) Montant des charges : 275 € / mois Modalité de récupération des charges locatives : Prévisionnelles mensuelles avec régularisation annuelle Honoraires à la charge du locataire : 1363.57 € dont 314.67 € pour l’état des lieux Dépôt de garantie : 1394 € Date de réalisation du diagnostic énergétique : 23/08/2023 Consommation énergie primaire : 105 kWh/m²/an Consommation énergie finale : Non communiqué Montant estimé des dépenses annuelles d'énergie pour un usage standard : entre 700 € et 1 000 € par an. Prix moyens des énergies indexés sur l'année Non communiqué (abonnements compris) Les informations sur les risques auxquels ce bien est exposé sont disponibles sur le site Géorisques : [www.georisques.gouv.fr\`](http://www.georisques.gouv.fr`) Email address of the seller (if available) Comma or pipe-separated list of picture URLs for the listing. Example: `https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/5e/3a/b8/5e3ab867f9aa30a25468436e42dba41a2b370e7c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/19/c8/9e/19c89ecf270b6226dcd53fa8143c7648f45c0490.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/af/1d/49/af1d49b6959bb680cc8f69ae247d0717a2cf4b6d.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/82/31/e7/8231e732a0de87ead42bbb9cd742684c70774b17.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/07/22/61/0722611838ca516a49bdc6a268d214ffb55a009c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/47/93/9a/47939ab21ff66dd56d36ddc15a7d5893bcc85605.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/86/df/0f/86df0ffa2e1372b81592425010ffe72b3c2367ec.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/4d/21/49/4d2149a3b309d3111fd3173e21aae6f7970eb6ed.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/8a/e5/5b/8ae55b11c86f9239fe1aaa609d3f464fb0066911.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/a8/4b/43/a84b437d2131284c78070a4d134087cf6c549923.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/0d/1c/24/0d1c24d24de4bf966c175a5948f575e11c405b10.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/gh/80/1a/gh801aacb6ad35f5d8860634825fb792be5c1d97.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/d7/42/86/d742868f726238dd3daf190d8a936c1ece7056b9.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/3d/4b/b8/3d4bb89200c27f5c1219a0e79e7fb1103f68679a.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/f9/d4/f3/f9d4f36d5fd362518f6954b0e61738c3550113e8.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/91/f7/e7/91f7e7308223c788eea4531ba949541d61141e07.jpg?rule=ad-large` Whether the listing is marked as urgent on Leboncoin. Example: `false` URL of the listing's main picture. Example: `https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large` Category of the listing on Leboncoin (e.g. Immobilier, Voitures). Example: `Locations` Currency of the listed price. Example: `EUR` French region where the listing is located. Example: `Provence-Alpes-Côte d'Azur` French department where the listing is located. Example: `Bouches-du-Rhône` City where the listing is located. Example: `Velaux` Formatted city name label as shown on Leboncoin. Example: `Velaux 13880` French postal code of the listing location. Example: `13880` Whether the listing has an exclusive promotion on Leboncoin Whether the listing has a paid boost on Leboncoin. Example: `false` Date the listing was first published on Leboncoin. Example: `2025-09-29T12:33:03+00:00` Date the listing was last published or renewed on Leboncoin. Example: `2025-09-29T12:33:03+00:00` Date the listing expires or is automatically removed Whether a phone number is visible on the listing. Example: `true` Current status of the listing on Leboncoin (e.g. active, expired) Whether the listing is for a mobile home or caravan Phone number extracted from the listing. Example: `0442747158` Phone number retrieved from the seller's Leboncoin profile Whether the seller has an online shop on Leboncoin. Example: `true` URL to the seller's Leboncoin shop. Example: `https://www.leboncoin.fr/boutique/21494` Type of seller (private individual or professional). Example: `1` Name of the seller or business. Example: `A C D IMMOBILIER VILLAGE` Unique identifier of the seller on Leboncoin. Example: `5e25f2ef-d2b7-4694-a321-e7a992df327e` Custom reference number assigned by the seller Internal API key used by the scraper. Example: `54bb0281238b45a03f0ee695f73e704f` Greenhouse gas emissions (GES) label as displayed on Leboncoin (e.g. A, B, C). Example: `A` Greenhouse gas emissions (GES) rating object. Example: `a` Energy Performance Diagnostic (DPE) label as displayed on Leboncoin (e.g. A, B, C). Example: `B` Energy Performance Diagnostic (DPE) rating object. Example: `b` Total number of rooms in the property. Example: `5` Number of bedrooms in the property Whether service charges (charges) are included in the listed price. Example: `true` Living surface area of the property in square metres. Example: `105` Floor level of the property Calculated price per square metre Whether the property is furnished. Example: `true` Type of real estate (e.g. apartment, house, land). Example: `Maison` Additional listing attributes returned by the Leboncoin API (JSON). Example: `{"GES": "A", "Extérieur": "Terrasse, Jardin", "Honoraires": "1364", "Référence": "1059", "Type de bien": "Maison", "Ce bien est :": "Meublé", "État du bien": "Bon état", "Frais d'agence": "19.73 %", "Classe énergie": "B", "Charges incluses": "Oui", "Caractéristiques": "Cuisine équipée", "Charges locatives": "275 €", "Mode de chauffage": "Autre", "Nombre de pièces": "5", "Surface habitable": "105 m²", "Type de chauffage": "Individuel", "Nombre de chambres": "3 ch.", "Dépôt de garantie": "1394 €", "Prix hors honoraires": "1394 €", "Étage de votre bien": "0", "Montant des honoraires": "275 €", "Frais d'état des lieux": "315 €", "Nombre de salles de bain": "1", "Surface totale du terrain": "1100 m²", "Loyer mensuel (hors charges)": "1394", "Bien soumis à l'encadrement des loyers": "Non"}` Extended listing details returned by the Leboncoin API (JSON). Example: `{"ges": "A", "rooms": "5", "square": "105 m²", "bedrooms": "3 ch.", "furnished": "Meublé", "is_import": "true", "custom_ref": "1059", "fees_price": "275 €", "lease_type": "rent", "district_id": "13112", "energy_rate": "B", "rental_fees": "1364", "floor_number": "0", "heating_mode": "Autre", "heating_type": "Individuel", "mandate_type": "simple", "nb_bathrooms": "1", "specificities": "Cuisine équipée", "external_ad_id": "ac3_8875_19616623", "inventory_fees": "315 €", "outside_access": "Terrasse, Jardin", "pro_rates_link": "https://media.immo-facile.com/segments/immo/catalog/images/manufacturers_bareme/39735.pdf", "activity_sector": "2", "monthly_charges": "275 €", "charges_included": "Oui", "district_type_id": "2", "global_condition": "Bon état", "real_estate_type": "Maison", "security_deposit": "1394 €", "land_plot_surface": "1100 m²", "price_except_fees": "1394 €", "district_visibility": "false", "is_public_rent_control": "Non", "rent_excluding_charges": "1394", "district_resolution_type": "integration", "negotiating_fees_percentage": "19.73 %"}` Additional enrichment functions enabled for this record. Example: `{"phone": {"filling_date": "09/30/2025, 14:21:24 +0200"}}` Latitude coordinate of the listing location. Example: `43.5237` Longitude coordinate of the listing location. Example: `5.2578` Type of advertisement on Leboncoin (offer or request). Example: `offer` Whether the listing is from a private seller only (no professionals). Example: `false` Internal hash used to identify this listing version. Example: `e3d8cc836e81c6a2488f8871f8d4502f` ## Seller Profile Fields Enriched seller profile data: Date the seller's Leboncoin account was created (YYYY-MM-DD). Example: `2019-03-15` Percentage of messages answered by the seller (0–100). Example: `87` Typical reply time as a human-readable string. Example: `10 minutes` Current online presence status of the seller. Values: `ONLINE`, `OFFLINE` Timestamp of the seller's last activity on Leboncoin. Example: `2025-07-04T03:45:00Z` JSON array of badge names awarded to the seller (e.g. `Responsiveness`, `RecommendedSeller`, `VerifiedPhoneNumber`) Total number of active listings the seller currently has on Leboncoin. Example: `12` JSON object with seller feedback scores per category: COMMUNICATION, PACKAGE, PRODUCT, RECOMMENDATION, USER\_ATTENTION URL of the seller's Leboncoin profile picture (medium resolution). Example: `https://static.leboncoin.fr/img/user/...` Bio or description text written by the seller on their Leboncoin profile ## Vehicle Fields Vehicle-specific fields (cars, motorbikes, utilities): Vehicle mileage in km. Example: `45000` Vehicle model year. Example: `2021` Fuel type. Example: `Essence` Gearbox type. Example: `Automatique` Crit'Air environmental sticker rating for the vehicle. Example: `1` Vehicle first registration date. Example: `06/2021` Item condition (consumer goods). Example: `Très bon état` Vehicle brand/make. Example: `Renault` Vehicle model name. Example: `Clio` Vehicle color. Example: `Blanc` Number of doors (cars). Example: `5` Number of seats. Example: `5` DIN horsepower. Example: `90` Fiscal horsepower (CV). Example: `6` Engine displacement in cc (motorbikes). Example: `650` Motorcycle type. Example: `Roadster` Motorcycle licence category. Example: `A` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 94856, "object": "result", "squid": "bb9c28c8c7700ca7138d26690c451595", "run": "57a01c9669db5f0d7900703b3876ecf1", "annonce_id": "3066299454", "title": "Villa 5 pièces 105 m²", "price": 1669, "url": "https://www.leboncoin.fr/ad/locations/3066299454", "description": "Villa 5 pièces 105 m²\n\nDans bel environnement, A LOUER VELAUX, Villa meublée type 5 d'une surface habitable de 104,89 m² sur terrain de 1100 m².\nRDC : pièce principale comprenant cuisine équipée américaine donnant sur salon/salle à manger avec cheminée, deux chambres/placards ,une salle de bains avec douche et baignoire, un WC.\n1er étage : une chambre en mezzanine.\nTerrasse - Garage/buanderie - \nClimatisation réversible.\n\nDisponible le 26/10/2025\n\nSurface : 105 m²\nLoyer : 1669 € / mois (charges comprises)\nMontant des charges : 275 € / mois\nModalité de récupération des charges locatives : Prévisionnelles mensuelles avec régularisation annuelle\nHonoraires à la charge du locataire : 1363.57 € dont 314.67 € pour l'état des lieux\nDépôt de garantie : 1394 €\nDate de réalisation du diagnostic énergétique : 23/08/2023\n\nConsommation énergie primaire : 105 kWh/m²/an\nConsommation énergie finale : Non communiqué\n\nMontant estimé des dépenses annuelles d'énergie pour un usage standard : entre 700 € et 1 000 € par an. Prix moyens des énergies indexés sur l'année Non communiqué (abonnements compris)\n\nLes informations sur les risques auxquels ce bien est exposé sont disponibles sur le site Géorisques : www.georisques.gouv.fr", "mail": null, "pictures": "https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/5e/3a/b8/5e3ab867f9aa30a25468436e42dba41a2b370e7c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/19/c8/9e/19c89ecf270b6226dcd53fa8143c7648f45c0490.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/af/1d/49/af1d49b6959bb680cc8f69ae247d0717a2cf4b6d.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/82/31/e7/8231e732a0de87ead42bbb9cd742684c70774b17.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/07/22/61/0722611838ca516a49bdc6a268d214ffb55a009c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/47/93/9a/47939ab21ff66dd56d36ddc15a7d5893bcc85605.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/86/df/0f/86df0ffa2e1372b81592425010ffe72b3c2367ec.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/4d/21/49/4d2149a3b309d3111fd3173e21aae6f7970eb6ed.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/8a/e5/5b/8ae55b11c86f9239fe1aaa609d3f464fb0066911.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/a8/4b/43/a84b437d2131284c78070a4d134087cf6c549923.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/0d/1c/24/0d1c24d24de4bf966c175a5948f575e11c405b10.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/gh/80/1a/gh801aacb6ad35f5d8860634825fb792be5c1d97.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/d7/42/86/d742868f726238dd3daf190d8a936c1ece7056b9.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/3d/4b/b8/3d4bb89200c27f5c1219a0e79e7fb1103f68679a.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/f9/d4/f3/f9d4f36d5fd362518f6954b0e61738c3550113e8.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/91/f7/e7/91f7e7308223c788eea4531ba949541d61141e07.jpg?rule=ad-large", "urgent": false, "picture": "https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large", "category_name": "Locations", "currency": "EUR", "region": "Provence-Alpes-Côte d'Azur", "department": "Bouches-du-Rhône", "city": "Velaux", "city_label": "Velaux 13880", "postal_code": "13880", "is_exclusive": null, "is_boosted": false, "first_publication_date": "2025-09-29T12:33:03+00:00", "last_publication_date": "2025-09-29T12:33:03+00:00", "expiration_date": null, "has_phone": true, "status": null, "is_mobile": null, "phone": "0442747158", "phone_from_user": null, "has_online_shop": true, "online_shop_url": "https://www.leboncoin.fr/boutique/21494", "owner_type": "1", "owner_name": "A C D IMMOBILIER VILLAGE", "user_id": "5e25f2ef-d2b7-4694-a321-e7a992df327e", "custom_ref": null, "api_key": "54bb0281238b45a03f0ee695f73e704f", "GES_string": "A", "GES": "a", "DPE_string": "B", "DPE": "b", "room_count": 5, "sleepingroom_count": null, "charges_included": true, "area": 105, "floor": null, "price_per_square_meter": null, "furnished": true, "real_estate_type": "Maison", "details": "{\"GES\": \"A\", \"Extérieur\": \"Terrasse, Jardin\", \"Honoraires\": \"1364\", \"Référence\": \"1059\", \"Type de bien\": \"Maison\", \"Ce bien est :\": \"Meublé\", \"État du bien\": \"Bon état\", \"Frais d'agence\": \"19.73 %\", \"Classe énergie\": \"B\", \"Charges incluses\": \"Oui\", \"Caractéristiques\": \"Cuisine équipée\", \"Charges locatives\": \"275 €\", \"Mode de chauffage\": \"Autre\", \"Nombre de pièces\": \"5\", \"Surface habitable\": \"105 m²\", \"Type de chauffage\": \"Individuel\", \"Nombre de chambres\": \"3 ch.\", \"Dépôt de garantie\": \"1394 €\", \"Prix hors honoraires\": \"1394 €\", \"Étage de votre bien\": \"0\", \"Montant des honoraires\": \"275 €\", \"Frais d'état des lieux\": \"315 €\", \"Nombre de salles de bain\": \"1\", \"Surface totale du terrain\": \"1100 m²\", \"Loyer mensuel (hors charges)\": \"1394\", \"Bien soumis à l'encadrement des loyers\": \"Non\"}", "more_details": "{\"ges\": \"A\", \"rooms\": \"5\", \"square\": \"105 m²\", \"bedrooms\": \"3 ch.\", \"furnished\": \"Meublé\", \"is_import\": \"true\", \"custom_ref\": \"1059\", \"fees_price\": \"275 €\", \"lease_type\": \"rent\", \"district_id\": \"13112\", \"energy_rate\": \"B\", \"rental_fees\": \"1364\", \"floor_number\": \"0\", \"heating_mode\": \"Autre\", \"heating_type\": \"Individuel\", \"mandate_type\": \"simple\", \"nb_bathrooms\": \"1\", \"specificities\": \"Cuisine équipée\", \"external_ad_id\": \"ac3_8875_19616623\", \"inventory_fees\": \"315 €\", \"outside_access\": \"Terrasse, Jardin\", \"pro_rates_link\": \"https://media.immo-facile.com/segments/immo/catalog/images/manufacturers_bareme/39735.pdf\", \"activity_sector\": \"2\", \"monthly_charges\": \"275 €\", \"charges_included\": \"Oui\", \"district_type_id\": \"2\", \"global_condition\": \"Bon état\", \"real_estate_type\": \"Maison\", \"security_deposit\": \"1394 €\", \"land_plot_surface\": \"1100 m²\", \"price_except_fees\": \"1394 €\", \"district_visibility\": \"false\", \"is_public_rent_control\": \"Non\", \"rent_excluding_charges\": \"1394\", \"district_resolution_type\": \"integration\", \"negotiating_fees_percentage\": \"19.73 %\"}", "functions": null, "lat": "43.5237", "lng": "5.2578", "ad_type": "offer", "no_salesmen": false, "hash_value": null, "seller_registered_at": "2021-02-02", "seller_reply_rate": 100, "seller_reply_time_text": "10 minutes", "seller_presence_status": "OFFLINE", "seller_presence_last_activity": "2026-06-10T15:53:13+00:00", "seller_badges": "[\"Responsiveness3\", \"VerifiedPhoneNumber\"]", "seller_total_ads": 12, "seller_feedback_scores": "{\"COMMUNICATION\": 1, \"PACKAGE\": 1, \"PRODUCT\": 1, \"RECOMMENDATION\": 1, \"USER_ATTENTION\": 1}", "seller_profile_picture_url": "https://img.leboncoin.fr/api/v1/tenants/.../images/profile/pictures/default/f7c839c3.jpg?rule=pp-medium", "seller_description": null, "mileage": null, "regdate": null, "fuel": null, "gearbox": null, "critair": null, "issuance_date": null, "condition": null, "brand": null, "model": null, "vehicule_color": null, "doors": null, "seats": null, "horse_power_din": null, "horse_power": null, "cubic_capacity": null, "cycle_type": null, "cycle_licence": null, "native_id": 94856 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-iter-listings-with-phone/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure scraper settings for Leboncoin Listings & Phone Search Export Configure your squid settings for the Leboncoin Listings & Phone Search Export scraper. This scraper extends the standard Leboncoin scraper with phone number extraction capabilities. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Phone Extraction Parameter Enable phone number extraction: | Parameter | Type | Default | Description | | - | - | - | - | | **functions.get\_phone\_numbers** | boolean | true | Extract phone numbers from listings (6 credits per listing) | ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `last_publication_date`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **max\_pages** | integer | null | Maximum number of result pages to crawl | | **max\_results** | integer | null | Total number of listings to collect before stopping | | **max\_unique\_results\_per\_run** | integer | null | Maximum unique results across all tasks in a single run | | **online\_shop** | boolean | false | Extract seller's shop URL (incurs extra requests/credits) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping workers (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Enabling `functions.get_phone_numbers` adds extra requests per listing, significantly increasing run time and credit usage. Only enable phone extraction when phone numbers are actually required for your use case. Phone numbers are only available when the seller has enabled phone contact on their listing. **Backward compatibility:** The old function name `phone` is still accepted but deprecated. Migrate to `get_phone_numbers`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Leboncoin Listings & Phone Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "get_phone_numbers": true }, "max_pages": 99, "fetch_since": null, "max_results": null, "online_shop": true } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings with phone extraction enabled response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Leboncoin Listings & Phone Search Export (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "functions": { "get_phone_numbers": True # Enable phone number extraction }, "max_pages": 99, "fetch_since": None, "max_results": None, "online_shop": True } } ) print(response.json()) ``` ## Response ```json 201 theme={null} { "name": "Leboncoin Listings & Phone Search Export (1)", "no_line_breaks": true, "params": { "functions": { "get_phone_numbers": true }, "max_pages": 99, "fetch_since": null, "max_results": null, "online_shop": true }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-listing-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Leboncoin Listing Scraper squid Add URLs or inputs to your **Leboncoin Listing Scraper** squid. Each task object must include the required fields below. Crawler ID: `9eade2d2a693bd871851806650e7fb4e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-listing-scraper/credit-cost Credit cost for the Leboncoin Listing Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listing (No Phone) | 4 | 4 credits per listing. | | Get Phone Number | 6 | 6 credits per phone found. No phone found = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/leboncoin-listing-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Leboncoin Listing Scraper Retrieve scraped data from your **Leboncoin Listing Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the listing on Leboncoin. Example: `3062366535` Title of the listing. Example: `Lot de 7 plats en inox de différentes tailles` Listed price of the item. Example: `18` Direct URL to the listing on Leboncoin. Example: `https://www.leboncoin.fr/ad/arts_de_la_table/3062366535` Full description text of the listing. Example: `7 plats en inox,4 peuvent aller sur l'induction a feu doux,, Détails 3 légumiers ronds,22,23,28 cm diamètre. 1 plat rond 30 cm , 2 plats ovales34/23 cm, 1 grand ovale 41/28. Livraison uniquement par mondial Relay ou enlever sur Caen Vaucelle. Poids total 4 kg.` Whether a phone number is available for this listing. Example: `false` Phone number of the seller Type of seller (private individual or professional). Example: `private` Name of the seller. Example: `gonne` Unique identifier of the seller on Leboncoin. Example: `89fb67be-e718-4bf4-b217-a809002f48c7` Store identifier for professional sellers. Example: `4616769` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 44561, "object": "result", "squid": "ae2db44eb64ea4fcea841f9337c2e670", "run": "98bb0ca6f9b831e7199d11e3d1208562", "annonce_id": "3062366535", "title": "Lot de 7 plats en inox de différentes tailles", "price": 18, "url": "https://www.leboncoin.fr/ad/arts_de_la_table/3062366535", "description": "7 plats en inox,4 peuvent aller sur l'induction a feu doux,,\nDétails 3 légumiers ronds,22,23,28 cm diamètre.\n1 plat rond 30 cm , 2 plats ovales34/23 cm, 1 grand ovale 41/28. Livraison uniquement par mondial Relay ou enlever sur Caen Vaucelle.\nPoids total 4 kg.", "has_phone": false, "phone": null, "owner_type": "private", "owner_name": "gonne", "owner_id": "89fb67be-e718-4bf4-b217-a809002f48c7", "store_id": "4616769", "functions": null, "native_id": 44561 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-listing-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Leboncoin Listing Scraper settings Configure your Leboncoin Listing Scraper squid settings. Enable phone number extraction to retrieve the seller's phone number from each listing page. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Optional Functions Enable these in the `params.functions` object: | Function | Type | Default | Description | | - | - | - | - | | **get\_phone\_numbers** | boolean | true | Fetch the seller's phone number from the listing page (6 credits per listing) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Phone number extraction is enabled by default. Disable it if you only need listing data to avoid extra credit charges. Phone numbers are only available when the seller has enabled phone contact on their listing. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Leboncoin Listing Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "get_phone_numbers": true } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Leboncoin Listing Scraper (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "functions": { "get_phone_numbers": True # 6 credits per listing } } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Leboncoin Listing Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "get_phone_numbers": true } } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-listing-status-checker/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Leboncoin Listing Status Checker squid Add URLs or inputs to your **Leboncoin Listing Status Checker** squid. Each task object must include the required fields below. Crawler ID: `0c60c33b95db65c86d5c9fc127b7b2aa` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-listing-status-checker/credit-cost Credit cost for the Leboncoin Listing Status Checker 1 credit per listing. # Get Results Source: https://docs.lobstr.io/examples/leboncoin-listing-status-checker/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Leboncoin Listing Status Checker Retrieve scraped data from your **Leboncoin Listing Status Checker** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Leboncoin listing URL that was checked. Example: `https://www.leboncoin.fr/ad/voitures/3172676206` Listing status: active or deactivated. Example: `active` HTTP status code returned by Leboncoin. Example: `200` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 34245, "object": "result", "squid": "75db5660a5f61ec94803af91f45097b0", "run": "a0766aca18784d68c2067f409e6e733e", "url": "https://www.leboncoin.fr/ad/voitures/3172676206", "status": "active", "status_code": 200, "functions": null, "native_id": 34245 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-listing-status-checker/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Leboncoin Listing Status Checker settings Configure your Leboncoin Listing Status Checker squid settings. This scraper checks whether Leboncoin listings are still active and has no scraper-specific parameters beyond global run limits. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Set a high concurrency value to check large batches of listing URLs quickly. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Leboncoin Listing Status Checker (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_unique_results_per_run": 1000 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Leboncoin Listing Status Checker (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_unique_results_per_run": 1000 } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Leboncoin Listing Status Checker (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_unique_results_per_run": 1000 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-listings-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Leboncoin Listings Search Export squid Add URLs or inputs to your **Leboncoin Listings Search Export** squid. Each task object must include the required fields below. Crawler ID: `33db1ca85160105eeb84d5aa51cfad10` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-listings-search-export/credit-cost Credit cost for the Leboncoin Listings Search Export 4 credits per listing. # Get Results Source: https://docs.lobstr.io/examples/leboncoin-listings-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Leboncoin Listings Search Export Retrieve scraped data from your **Leboncoin Listings Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the listing on Leboncoin. Example: `3066299454` Title of the listing as posted on Leboncoin. Example: `Villa 5 pièces 105 m²` Listed price of the item or property. Example: `1669` Direct URL to the listing on Leboncoin. Example: `https://www.leboncoin.fr/ad/locations/3066299454` Full description text of the listing. Example: \`Villa 5 pièces 105 m² Dans bel environnement, A LOUER VELAUX, Villa meublée type 5 d'une surface habitable de 104,89 m² sur terrain de 1100 m². RDC : pièce principale comprenant cuisine équipée américaine donnant sur salon/salle à manger avec cheminée, deux chambres/placards ,une salle de bains avec douche et baignoire, un WC. 1er étage : une chambre en mezzanine. Terrasse - Garage/buanderie - Climatisation réversible. Disponible le 26/10/2025 Surface : 105 m² Loyer : 1669 € / mois (charges comprises) Montant des charges : 275 € / mois Modalité de récupération des charges locatives : Prévisionnelles mensuelles avec régularisation annuelle Honoraires à la charge du locataire : 1363.57 € dont 314.67 € pour l’état des lieux Dépôt de garantie : 1394 € Date de réalisation du diagnostic énergétique : 23/08/2023 Consommation énergie primaire : 105 kWh/m²/an Consommation énergie finale : Non communiqué Montant estimé des dépenses annuelles d'énergie pour un usage standard : entre 700 € et 1 000 € par an. Prix moyens des énergies indexés sur l'année Non communiqué (abonnements compris) Les informations sur les risques auxquels ce bien est exposé sont disponibles sur le site Géorisques : [www.georisques.gouv.fr\`](http://www.georisques.gouv.fr`) Email address of the seller (if available) Comma or pipe-separated list of picture URLs for the listing. Example: `https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/5e/3a/b8/5e3ab867f9aa30a25468436e42dba41a2b370e7c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/19/c8/9e/19c89ecf270b6226dcd53fa8143c7648f45c0490.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/af/1d/49/af1d49b6959bb680cc8f69ae247d0717a2cf4b6d.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/82/31/e7/8231e732a0de87ead42bbb9cd742684c70774b17.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/07/22/61/0722611838ca516a49bdc6a268d214ffb55a009c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/47/93/9a/47939ab21ff66dd56d36ddc15a7d5893bcc85605.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/86/df/0f/86df0ffa2e1372b81592425010ffe72b3c2367ec.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/4d/21/49/4d2149a3b309d3111fd3173e21aae6f7970eb6ed.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/8a/e5/5b/8ae55b11c86f9239fe1aaa609d3f464fb0066911.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/a8/4b/43/a84b437d2131284c78070a4d134087cf6c549923.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/0d/1c/24/0d1c24d24de4bf966c175a5948f575e11c405b10.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/gh/80/1a/gh801aacb6ad35f5d8860634825fb792be5c1d97.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/d7/42/86/d742868f726238dd3daf190d8a936c1ece7056b9.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/3d/4b/b8/3d4bb89200c27f5c1219a0e79e7fb1103f68679a.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/f9/d4/f3/f9d4f36d5fd362518f6954b0e61738c3550113e8.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/91/f7/e7/91f7e7308223c788eea4531ba949541d61141e07.jpg?rule=ad-large` Whether the listing is marked as urgent on Leboncoin. Example: `false` URL of the listing's main picture. Example: `https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large` Category of the listing on Leboncoin (e.g. Immobilier, Voitures). Example: `Locations` Currency of the listed price. Example: `EUR` French region where the listing is located. Example: `Provence-Alpes-Côte d'Azur` French department where the listing is located. Example: `Bouches-du-Rhône` City where the listing is located. Example: `Velaux` Formatted city name label as shown on Leboncoin. Example: `Velaux 13880` French postal code of the listing location. Example: `13880` Whether the listing has an exclusive promotion on Leboncoin Date the listing was first published on Leboncoin. Example: `2025-09-29T12:33:03+00:00` Date the listing was last published or renewed on Leboncoin. Example: `2025-09-29T12:33:03+00:00` Date the listing expires or is automatically removed Current status of the listing on Leboncoin (e.g. active, expired) Type of seller (private individual or professional). Example: `1` Name of the seller or business. Example: `A C D IMMOBILIER VILLAGE` Unique identifier of the seller on Leboncoin. Example: `5e25f2ef-d2b7-4694-a321-e7a992df327e` Custom reference number assigned by the seller Internal API key used by the scraper. Example: `54bb0281238b45a03f0ee695f73e704f` Greenhouse gas emissions (GES) label as displayed on Leboncoin (e.g. A, B, C). Example: `A` Greenhouse gas emissions (GES) rating object. Example: `a` Energy Performance Diagnostic (DPE) label as displayed on Leboncoin (e.g. A, B, C). Example: `B` Energy Performance Diagnostic (DPE) rating object. Example: `b` Total number of rooms in the property. Example: `5` Number of bedrooms in the property Whether service charges (charges) are included in the listed price. Example: `true` Living surface area of the property in square metres. Example: `105` Floor level of the property Calculated price per square metre Whether the property is furnished. Example: `true` Type of real estate (e.g. apartment, house, land). Example: `Maison` Additional listing attributes returned by the Leboncoin API (JSON). Example: `{"GES": "A", "Extérieur": "Terrasse, Jardin", "Honoraires": "1364", "Référence": "1059", "Type de bien": "Maison", "Ce bien est :": "Meublé", "État du bien": "Bon état", "Frais d'agence": "19.73 %", "Classe énergie": "B", "Charges incluses": "Oui", "Caractéristiques": "Cuisine équipée", "Charges locatives": "275 €", "Mode de chauffage": "Autre", "Nombre de pièces": "5", "Surface habitable": "105 m²", "Type de chauffage": "Individuel", "Nombre de chambres": "3 ch.", "Dépôt de garantie": "1394 €", "Prix hors honoraires": "1394 €", "Étage de votre bien": "0", "Montant des honoraires": "275 €", "Frais d'état des lieux": "315 €", "Nombre de salles de bain": "1", "Surface totale du terrain": "1100 m²", "Loyer mensuel (hors charges)": "1394", "Bien soumis à l'encadrement des loyers": "Non"}` Extended listing details returned by the Leboncoin API (JSON). Example: `{"ges": "A", "rooms": "5", "square": "105 m²", "bedrooms": "3 ch.", "furnished": "Meublé", "is_import": "true", "custom_ref": "1059", "fees_price": "275 €", "lease_type": "rent", "district_id": "13112", "energy_rate": "B", "rental_fees": "1364", "floor_number": "0", "heating_mode": "Autre", "heating_type": "Individuel", "mandate_type": "simple", "nb_bathrooms": "1", "specificities": "Cuisine équipée", "external_ad_id": "ac3_8875_19616623", "inventory_fees": "315 €", "outside_access": "Terrasse, Jardin", "pro_rates_link": "https://media.immo-facile.com/segments/immo/catalog/images/manufacturers_bareme/39735.pdf", "activity_sector": "2", "monthly_charges": "275 €", "charges_included": "Oui", "district_type_id": "2", "global_condition": "Bon état", "real_estate_type": "Maison", "security_deposit": "1394 €", "land_plot_surface": "1100 m²", "price_except_fees": "1394 €", "district_visibility": "false", "is_public_rent_control": "Non", "rent_excluding_charges": "1394", "district_resolution_type": "integration", "negotiating_fees_percentage": "19.73 %"}` Additional enrichment functions enabled for this record. Example: `{"phone": {"filling_date": "09/30/2025, 14:21:24 +0200"}}` Latitude coordinate of the listing location. Example: `43.5237` Longitude coordinate of the listing location. Example: `5.2578` Type of advertisement on Leboncoin (offer or request). Example: `offer` Whether the listing is from a private seller only (no professionals). Example: `false` Internal hash used to identify this listing version. Example: `e3d8cc836e81c6a2488f8871f8d4502f` Whether the seller has an online shop on Leboncoin. Example: `true` URL to the seller's Leboncoin shop. Example: `https://www.leboncoin.fr/boutique/21494` Capacity of the space (e.g. number of guests for accommodation listings) Whether the property has a swimming pool ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 82586, "object": "result", "squid": "58dea8cc2f00ff30027b1fc99d76ce90", "run": "1e974d9125907a6e1681da818bff4e01", "annonce_id": "3066299454", "title": "Villa 5 pièces 105 m²", "price": 1669, "url": "https://www.leboncoin.fr/ad/locations/3066299454", "description": "Villa 5 pièces 105 m²\n\nDans bel environnement, A LOUER VELAUX, Villa meublée type 5 d'une surface habitable de 104,89 m² sur terrain de 1100 m².\nRDC : pièce principale comprenant cuisine équipée américaine donnant sur salon/salle à manger avec cheminée, deux chambres/placards ,une salle de bains avec douche et baignoire, un WC.\n1er étage : une chambre en mezzanine.\nTerrasse - Garage/buanderie - \nClimatisation réversible.\n\nDisponible le 26/10/2025\n\nSurface : 105 m²\nLoyer : 1669 € / mois (charges comprises)\nMontant des charges : 275 € / mois\nModalité de récupération des charges locatives : Prévisionnelles mensuelles avec régularisation annuelle\nHonoraires à la charge du locataire : 1363.57 € dont 314.67 € pour l'état des lieux\nDépôt de garantie : 1394 €\nDate de réalisation du diagnostic énergétique : 23/08/2023\n\nConsommation énergie primaire : 105 kWh/m²/an\nConsommation énergie finale : Non communiqué\n\nMontant estimé des dépenses annuelles d'énergie pour un usage standard : entre 700 € et 1 000 € par an. Prix moyens des énergies indexés sur l'année Non communiqué (abonnements compris)\n\nLes informations sur les risques auxquels ce bien est exposé sont disponibles sur le site Géorisques : www.georisques.gouv.fr", "mail": null, "pictures": "https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/5e/3a/b8/5e3ab867f9aa30a25468436e42dba41a2b370e7c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/19/c8/9e/19c89ecf270b6226dcd53fa8143c7648f45c0490.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/af/1d/49/af1d49b6959bb680cc8f69ae247d0717a2cf4b6d.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/82/31/e7/8231e732a0de87ead42bbb9cd742684c70774b17.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/07/22/61/0722611838ca516a49bdc6a268d214ffb55a009c.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/47/93/9a/47939ab21ff66dd56d36ddc15a7d5893bcc85605.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/86/df/0f/86df0ffa2e1372b81592425010ffe72b3c2367ec.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/4d/21/49/4d2149a3b309d3111fd3173e21aae6f7970eb6ed.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/8a/e5/5b/8ae55b11c86f9239fe1aaa609d3f464fb0066911.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/a8/4b/43/a84b437d2131284c78070a4d134087cf6c549923.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/0d/1c/24/0d1c24d24de4bf966c175a5948f575e11c405b10.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/gh/80/1a/gh801aacb6ad35f5d8860634825fb792be5c1d97.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/d7/42/86/d742868f726238dd3daf190d8a936c1ece7056b9.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/3d/4b/b8/3d4bb89200c27f5c1219a0e79e7fb1103f68679a.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/f9/d4/f3/f9d4f36d5fd362518f6954b0e61738c3550113e8.jpg?rule=ad-large, https://img.leboncoin.fr/api/v1/lbcpb1/images/91/f7/e7/91f7e7308223c788eea4531ba949541d61141e07.jpg?rule=ad-large", "urgent": false, "picture": "https://img.leboncoin.fr/api/v1/lbcpb1/images/84/bc/c2/84bcc22c34147d593b771914b7db7b9791c71c3c.jpg?rule=ad-large", "category_name": "Locations", "currency": "EUR", "region": "Provence-Alpes-Côte d'Azur", "department": "Bouches-du-Rhône", "city": "Velaux", "city_label": "Velaux 13880", "postal_code": "13880", "is_exclusive": null, "first_publication_date": "2025-09-29T12:33:03+00:00", "last_publication_date": "2025-09-29T12:33:03+00:00", "expiration_date": null, "status": null, "owner_type": "1", "owner_name": "A C D IMMOBILIER VILLAGE", "user_id": "5e25f2ef-d2b7-4694-a321-e7a992df327e", "custom_ref": null, "api_key": "54bb0281238b45a03f0ee695f73e704f", "GES_string": "A", "GES": "a", "DPE_string": "B", "DPE": "b", "room_count": 5, "sleepingroom_count": null, "charges_included": true, "area": 105, "floor": null, "price_per_square_meter": null, "furnished": true, "real_estate_type": "Maison", "details": "{\"GES\": \"A\", \"Extérieur\": \"Terrasse, Jardin\", \"Honoraires\": \"1364\", \"Référence\": \"1059\", \"Type de bien\": \"Maison\", \"Ce bien est :\": \"Meublé\", \"État du bien\": \"Bon état\", \"Frais d'agence\": \"19.73 %\", \"Classe énergie\": \"B\", \"Charges incluses\": \"Oui\", \"Caractéristiques\": \"Cuisine équipée\", \"Charges locatives\": \"275 €\", \"Mode de chauffage\": \"Autre\", \"Nombre de pièces\": \"5\", \"Surface habitable\": \"105 m²\", \"Type de chauffage\": \"Individuel\", \"Nombre de chambres\": \"3 ch.\", \"Dépôt de garantie\": \"1394 €\", \"Prix hors honoraires\": \"1394 €\", \"Étage de votre bien\": \"0\", \"Montant des honoraires\": \"275 €\", \"Frais d'état des lieux\": \"315 €\", \"Nombre de salles de bain\": \"1\", \"Surface totale du terrain\": \"1100 m²\", \"Loyer mensuel (hors charges)\": \"1394\", \"Bien soumis à l'encadrement des loyers\": \"Non\"}", "more_details": "{\"ges\": \"A\", \"rooms\": \"5\", \"square\": \"105 m²\", \"bedrooms\": \"3 ch.\", \"furnished\": \"Meublé\", \"is_import\": \"true\", \"custom_ref\": \"1059\", \"fees_price\": \"275 €\", \"lease_type\": \"rent\", \"district_id\": \"13112\", \"energy_rate\": \"B\", \"rental_fees\": \"1364\", \"floor_number\": \"0\", \"heating_mode\": \"Autre\", \"heating_type\": \"Individuel\", \"mandate_type\": \"simple\", \"nb_bathrooms\": \"1\", \"specificities\": \"Cuisine équipée\", \"external_ad_id\": \"ac3_8875_19616623\", \"inventory_fees\": \"315 €\", \"outside_access\": \"Terrasse, Jardin\", \"pro_rates_link\": \"https://media.immo-facile.com/segments/immo/catalog/images/manufacturers_bareme/39735.pdf\", \"activity_sector\": \"2\", \"monthly_charges\": \"275 €\", \"charges_included\": \"Oui\", \"district_type_id\": \"2\", \"global_condition\": \"Bon état\", \"real_estate_type\": \"Maison\", \"security_deposit\": \"1394 €\", \"land_plot_surface\": \"1100 m²\", \"price_except_fees\": \"1394 €\", \"district_visibility\": \"false\", \"is_public_rent_control\": \"Non\", \"rent_excluding_charges\": \"1394\", \"district_resolution_type\": \"integration\", \"negotiating_fees_percentage\": \"19.73 %\"}", "functions": null, "lat": "43.5237", "lng": "5.2578", "ad_type": "offer", "no_salesmen": false, "hash_value": null, "has_online_shop": true, "online_shop_url": "https://www.leboncoin.fr/boutique/21494", "capacity": null, "has_swimming_pool": null, "native_id": 82586 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-listings-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Leboncoin Listings Search Export scraper settings Configure your Leboncoin Listings Search Export squid settings. Control pagination, result limits, time filters, and whether to include seller shop URLs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 99 | Maximum number of search result pages to crawl (max: 99) | | **max\_results** | integer | unlimited | Maximum number of listings to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **online\_shop** | boolean | false | Extract the seller's shop URL (incurs extra requests per listing) | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `last_publication_date`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since: 1h` to monitor new listings in near real-time. Combine with `export_unique_results: true` to avoid duplicates when a listing appears across multiple pages. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Leboncoin Listings Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 99, "fetch_since": "24h", "online_shop": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Leboncoin Listings Search Export (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 99, "fetch_since": "24h", "online_shop": False } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Leboncoin Listings Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 99, "fetch_since": "24h", "online_shop": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/leboncoin-messages-reader/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Leboncoin Messages Reader squid Add Leboncoin messaging URLs to your **Leboncoin Messages Reader** squid. Crawler ID: `dd8d063c6af13ff80ea5da2d03976f31` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields The Leboncoin messaging URL to read. Use `https://www.leboncoin.fr/messages` to read the whole inbox of the connected account, or `https://www.leboncoin.fr/messages/id/{conversation_id}` to read one conversation only. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.leboncoin.fr/messages"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.leboncoin.fr/messages"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.leboncoin.fr/messages"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/leboncoin-messages-reader/credit-cost Credit cost for the Leboncoin Messages Reader 1 credit per message row. The Leboncoin Messages Reader is a Premium-only scraper. # Get Results Source: https://docs.lobstr.io/examples/leboncoin-messages-reader/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Leboncoin Messages Reader Retrieve scraped data from your **Leboncoin Messages Reader** runs. One row per message, with the conversation, the listing and the other party on every row. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields Unique identifier of the message on Leboncoin. Full text of the message, line breaks preserved. Message kind as returned by Leboncoin: `ApiTextMessage` for a regular message, `ApiTemplateMessage` for a templated one. Identifier of the Leboncoin message template when the message was sent from a template, empty otherwise. Date and time (UTC) the message was sent. `received` when the message was written by the other party, `sent` when it was written by the connected Leboncoin account. True when the message was sent by the connected Leboncoin account. True when the message has been read by the connected Leboncoin account. True when the other party has read the message (read receipt on messages you sent). Number of files attached to the message. Raw attachment objects attached to the message, as returned by Leboncoin. Leboncoin user id of the message sender. Display name of the message sender. Unique identifier of the conversation the message belongs to. Direct URL of the conversation in the Leboncoin messaging inbox. Identifier of the Leboncoin listing the conversation is about. Same identifier as the `annonce_id` of the Leboncoin Auto Message Sender, so replies can be joined back to the messages sent. Title of the listing the conversation is about. Current status of the listing: `active` or `deleted`. Leboncoin category id of the listing (e.g. `9` = Ventes immobilières). Thumbnail image of the listing. Leboncoin user id of the listing owner. Type of the listing owner, `private` for a private seller. Empty when Leboncoin does not return it. Leboncoin user id of the other party in the conversation. Display name of the other party in the conversation. Date and time (UTC) of the most recent message of the conversation at collection time. Preview of the most recent message of the conversation at collection time. Number of files attached to the most recent message of the conversation. Number of unread messages in the conversation at collection time. True when the conversation had at least one unread message at collection time. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"message_id": "b07ce020-6be6-11f1-8080-808080808080", "message_text": "Hello Sasha, toutes les infos utiles sont dans l'annonce !\nMichel.", "message_type": "ApiTextMessage", "message_sent_at": "2026-06-19T13:56:37.282000+00:00", "direction": "received", "is_outgoing": false, "is_read": true, "conversation_id": "c2d7efff-5f3e-4898-8d49-979f94260003", "conversation_url": "https://www.leboncoin.fr/messages/id/c2d7efff-5f3e-4898-8d49-979f94260003", "annonce_id": "3196445542", "ad_title": "Maison individuelle de plein-pied proche Louhans", "counterparty_name": "deschamps"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/leboncoin-messages-reader/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Leboncoin Messages Reader settings Configure your **Leboncoin Messages Reader** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | received\_only | boolean | false | Collect only the messages written by the other party. When false, the messages sent by the connected account are collected too, as the context of the reply. | | unread\_only | boolean | false | Collect only the conversations that have at least one unread message at run time. Reading messages with this crawler never marks them as read. | | fetch\_since | string | — | Only collect messages sent after this threshold (based on `message_sent_at`). Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`). Conversations whose last message is older than the threshold are skipped entirely. | | fetch\_since\_timezone | string | — | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values. | | max\_results | integer | — | Maximum number of messages to collect per task. Leave empty to collect every message found. | | max\_unique\_results\_per\_run | integer | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "received_only": true, "unread_only": false, "fetch_since": "7d" }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "received_only": True, "unread_only": False, "fetch_since": "7d", }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"received_only": true, "unread_only": false, "fetch_since": "7d"}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-company-employees-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your LinkedIn Company Employees Scraper squid Add URLs or inputs to your **LinkedIn Company Employees Scraper** squid. Crawler ID: `08ac061ab290b5ae0f831e086c98d4b5` This scraper requires a synced LinkedIn account. Connect your LinkedIn account in the lobstr.io account settings before use. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields LinkedIn company URL or company slug. Example: `https://www.linkedin.com/company/google` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "08ac061ab290b5ae0f831e086c98d4b5", "tasks": [ {"url": "https://www.linkedin.com/company/google"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "08ac061ab290b5ae0f831e086c98d4b5", "tasks": [ {"url": "https://www.linkedin.com/company/google"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.linkedin.com/company/google"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-company-employees-scraper/credit-cost Credit cost for the LinkedIn Company Employees Scraper 1 credit per employee. # Get Results Source: https://docs.lobstr.io/examples/linkedin-company-employees-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from LinkedIn Company Employees Scraper Retrieve scraped data from your **LinkedIn Company Employees Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields LinkedIn internal profile id, stable across name/URL changes. Example: `ACoAAABcDefGHIjklMNOpQRSTUVwXyz` Full name of the employee as displayed by LinkedIn. Example: `Alice Johnson` Public profile slug used in the profile URL. Example: `alice-johnson-12345` Direct URL to the employee's LinkedIn profile. Example: `https://www.linkedin.com/in/alice-johnson-12345` Profile headline. Example: `Senior Software Engineer at Google` Location as displayed by LinkedIn. Example: `San Francisco Bay Area` URL of the employee profile picture. Example: `https://media.licdn.com/dms/image/v2/Cabcde/profile-displayphoto-shrink_200_200/0/1234567890?e=1234567890&v=beta&t=abc` Connection degree between the connected account and this employee (1st, 2nd, 3rd+). Example: `2nd` Whether LinkedIn displays the verified member badge. Example: `false` Whether LinkedIn displays the premium member badge. Example: `false` LinkedIn member URN (numeric member id). Example: `urn:li:member:123456789` Name of the company the employee was matched on. Example: `Google` URL of the company LinkedIn page. Example: `https://www.linkedin.com/company/google` Slug of the company LinkedIn page. Example: `google` Numeric LinkedIn id of the company. Example: `1441` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=08ac061ab290b5ae0f831e086c98d4b5" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "08ac061ab290b5ae0f831e086c98d4b5", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"full_name": "Alice Johnson", "headline": "Senior Software Engineer at Google", "location_text": "San Francisco Bay Area", "profile_url": "https://www.linkedin.com/in/alice-johnson-12345", "connection_degree": "2nd", "company_name": "Google"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-company-employees-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure LinkedIn Company Employees Scraper settings Configure your **LinkedIn Company Employees Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | keyword | string | — | Free-text filter applied to the employee search, e.g. 'engineer' or 'sales' | | max\_results | integer | 1000 | Maximum number of employees to scrape per company | | max\_unique\_results\_per\_run | integer | — | Max unique results across all tasks in the run | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/08ac061ab290b5ae0f831e086c98d4b5 \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "keyword": "engineer", "max_results": 1000 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/08ac061ab290b5ae0f831e086c98d4b5", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "keyword": "engineer", "max_results": 1000, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"keyword": "engineer", "max_results": 1000}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-company/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your LinkedIn Company Scraper squid Add URLs or inputs to your **LinkedIn Company Scraper** squid. Crawler ID: `a6fab652671e54f962ce9ebe48d5ffed` No LinkedIn account required — this scraper works without cookies or login. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields LinkedIn company URL or company slug. Example: `https://www.linkedin.com/company/google` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.linkedin.com/company/google"}]}' ``` ```python Python theme={null} import requests headers = {"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"} response = requests.post("https://api.lobstr.io/v1/tasks", headers=headers, json={"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.linkedin.com/company/google"}]}) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.linkedin.com/company/google"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-company/credit-cost Credit cost for the LinkedIn Company Scraper 1 credit per company page. # Get Results Source: https://docs.lobstr.io/examples/linkedin-company/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from LinkedIn Company Scraper Retrieve scraped data from your **LinkedIn Company Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields LinkedIn vanity slug for the company. Example: `google` Company name. Example: `Google` Canonical LinkedIn URL. Example: `https://www.linkedin.com/company/google` LinkedIn internal numeric identifier. Example: `1441` Short tagline. Full 'About us' description. Company website. Example: `https://about.google` LinkedIn industry. Example: `Technology, Information and Internet` Employee count range declared by the company. Example: `10,001+ employees` Exact number of LinkedIn members listing this company. Example: `306912` Number of LinkedIn followers. Example: `23481902` Year founded. Example: `1998` Headquarters as displayed. Example: `Mountain View, CA` Street address. City. Example: `Mountain View` State or region. Example: `CA` Postal code. Example: `94043` Country code. Example: `US` Every office location listed. Specialties declared by the company. Type of company. Example: `Public Company` URL of the company logo. URL of the cover image. Affiliated company pages. Showcase pages of the company. Pages LinkedIn shows as similar. Products showcased. Company phone number (only visible to logged-in members). ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"universal_name": "google", "name": "Google", "url": "https://www.linkedin.com/company/google", "industry": "Technology, Information and Internet", "employees_count": 306912, "followers_count": 23481902, "founded_year": 1998, "hq_country": "US"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-company/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure LinkedIn Company Scraper settings Configure your **LinkedIn Company Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | **url** | string | — | LinkedIn company URL, showcase page URL, or company slug | | **max\_results** | integer | — | Caps rows collected per task | ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"max_results": 100}}' ``` ```python Python theme={null} import requests requests.post("https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"}, json={"params": {"max_results": 100}}) ``` ## Response ```json 201 theme={null} {"params": {"max_results": 100}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-jobs-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your LinkedIn Jobs Scraper squid Add URLs or inputs to your **LinkedIn Jobs Scraper** squid. Crawler ID: `b5a5fc71ba325dc507bc302e02327d9b` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields A LinkedIn jobs search URL, or a link to a single job posting. **How to get one:** open a private browsing window, go to [https://www.linkedin.com/jobs](https://www.linkedin.com/jobs), type your job title and location, apply any filters you want, then copy the URL from the address bar. The filters below still apply on top of the URL for anything the URL itself does not already set. Example: `https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&f_TPR=r604800` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&f_TPR=r604800"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&f_TPR=r604800"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&f_TPR=r604800"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-jobs-scraper/credit-cost Credit cost for the LinkedIn Jobs Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Jobs | 1 | 1 credit per job posting (title, company, location, posted date, apply link, snippet). | | Full Job Details | 1 | 1 extra credit per job when `job_details` is enabled. Off by default. Free when the task input is a single job URL, since that posting page is already scraped in full. | | Company Details | 1 | 1 extra credit per job when `company_details` is enabled. Off by default. | # Get Results Source: https://docs.lobstr.io/examples/linkedin-jobs-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from LinkedIn Jobs Scraper Retrieve scraped data from your **LinkedIn Jobs Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Jobs Unique LinkedIn job posting identifier. Example: `4448124252` Direct URL to the job posting on LinkedIn. Example: `https://www.linkedin.com/jobs/view/4448124252` Job position title. Example: `Software Engineer` Name of the hiring company. Example: `Cohere` LinkedIn page URL of the hiring company. Example: `https://www.linkedin.com/company/cohere-ai` URL of the hiring company's logo image. Example: `https://media.licdn.com/dms/image/v2/C560BAQGI_GYoDekJsQ/company-logo_100_100/0/1680024442682` Job location as displayed on the posting. Example: `Paris, Île-de-France, France` Date the job was posted (daily granularity). Example: `2026-08-03 00:00:00` Human-readable posting age as displayed on LinkedIn. Example: `1 week ago` Salary information as displayed on the posting, when available. Example: `$110,000.00/yr - $130,000.00/yr` Badges displayed on the job card (e.g. Actively Hiring, Be an early applicant). Example: `Actively Hiring` ### Full Job Details Full job description as plain text. Example: `Who are we? Cohere is the leading security-first enterprise AI company...` Full job description with HTML formatting preserved. Example: `

Who are we?

Cohere is the leading security-first enterprise AI company...

`
Required seniority level as listed on the posting. Example: `Mid-Senior level` Employment type (e.g. Full-time, Contract, Internship). Example: `Full-time` Main job function / department. Example: `Engineering and Information Technology` Industries of the hiring company for this job. Example: `Software Development` Number of applicants so far (LinkedIn shows exact counts below 200, then 'Over 200'). Example: `25` How applications are handled: `easy_apply` (on LinkedIn) or `external` (company site). Example: `external` URL where candidates actually apply (external application URL when the job redirects off LinkedIn). Example: `https://jobs.lever.co/cohere/12345` Lower bound of the salary range, parsed as a number. Example: `110000.0` Upper bound of the salary range, parsed as a number. Example: `130000.0` Currency of the salary range. Example: `USD` Period the salary range refers to (yearly, monthly, weekly, hourly). Example: `yearly` Name of the recruiter or person who posted the job, when publicly shown. Example: `Andrea Cowan` LinkedIn headline of the job poster, when publicly shown. Example: `Technical Recruiter at Meta` LinkedIn profile URL of the job poster, when publicly shown. Example: `https://www.linkedin.com/in/andrea-cowan-458b5423b` Profile photo URL of the job poster, when publicly shown. Example: `https://media.licdn.com/dms/image/C5603AQErv53vemaq_A/profile-displayphoto-shrink_100_100/0/1657753132661` LinkedIn internal identifier of the hiring company. Example: `24024765` ### Company Details External website of the hiring company. Example: `https://cohere.com` About section of the hiring company's LinkedIn page. Example: `Cohere is the leading security-first enterprise AI company...` Industry of the hiring company as listed on its LinkedIn page. Example: `Software Development` Company size bracket as listed on its LinkedIn page. Example: `201-500 employees` Number of employees on LinkedIn. Example: `1019` Number of LinkedIn followers of the hiring company. Example: `253257` Year the hiring company was founded. Example: `2019` Headquarters location of the hiring company. Example: `Toronto, Ontario` Specialties listed on the hiring company's LinkedIn page. Example: `Natural Language Processing, Machine Learning, Artificial Intelligence` Tagline of the hiring company's LinkedIn page. Example: `The leading security-first enterprise AI company` Organization type of the hiring company (e.g. Privately Held, Public Company). Example: `Privately Held` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"job_id": "4448124252", "url": "https://www.linkedin.com/jobs/view/4448124252", "title": "Software Engineer", "company_name": "Cohere", "company_url": "https://www.linkedin.com/company/cohere-ai", "company_logo": "https://media.licdn.com/dms/image/v2/C560BAQGI_GYoDekJsQ/company-logo_100_100/0/1680024442682", "location": "Paris, \u00cele-de-France, France", "posted_at": "2026-08-03 00:00:00", "posted_time_ago": "1 week ago", "salary": "$110,000.00/yr - $130,000.00/yr"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-jobs-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure LinkedIn Jobs Scraper settings Configure your **LinkedIn Jobs Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | date\_posted | string | `Any time` | Only return jobs posted within this time window. Applied on top of your URL, unless the URL already carries a date filter. One of: `Any time`, `Past month`, `Past week`, `Past 24 hours`. | | job\_type | string | `Any` | Filter by employment type. Applied on top of your URL. NB: LinkedIn's new AI search treats this as search intent (like typing it in the search box), so close matches may occasionally appear. One of: `Any`, `Full-time`, `Part-time`, `Contract`, `Temporary`, `Internship`, `Volunteer`, `Other`. | | experience\_level | string | `Any` | Filter by required experience level. Applied on top of your URL. NB: LinkedIn's new AI search treats this as search intent (like typing it in the search box), so close matches may occasionally appear. One of: `Any`, `Internship`, `Entry level`, `Associate`, `Mid-Senior level`, `Director`, `Executive`. | | workplace\_type | string | `Any` | Filter by workplace arrangement. Applied on top of your URL. NB: LinkedIn's new AI search treats this as search intent (like typing it in the search box), so close matches may occasionally appear. One of: `Any`, `On-site`, `Remote`, `Hybrid`. | | easy\_apply | boolean | false | Only return jobs that can be applied to directly on LinkedIn. Applied on top of your URL, unless the URL already carries this filter. | | under\_10\_applicants | boolean | false | Only return jobs with fewer than 10 applicants. Applied on top of your URL, unless the URL already carries this filter. | | distance | string | `Any distance` | Maximum search radius around the location in the URL. Applied unless the URL already carries a distance. One of: `Any distance`, `5 miles`, `10 miles`, `25 miles`, `50 miles`, `100 miles`. | | sort\_by | string | `Relevance` | How results are ordered. `Most recent` sorts by listing time. Applied unless the URL already carries a sort. One of: `Relevance`, `Most recent`. | | exclude\_job\_titles | string | — | Comma-separated words. Jobs whose title contains any of them are skipped before collection, so they never consume credits (e.g. `senior, manager, director`). | | exclude\_companies | string | — | Comma-separated company names. Jobs posted by these companies are skipped before collection, so they never consume credits (e.g. `Randstad, Adecco`). | | max\_results | int | `1000` | Max number of jobs to scrape per search. NB: LinkedIn displays up to 1,000 jobs per search URL, no more. To collect more, split your search by location or keyword. | | max\_unique\_results\_per\_run | int | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | | fetch\_since | fetch\_since | — | Only collect jobs posted after this threshold (based on `posted_at`) — applied directly in the LinkedIn search, so filtered-out jobs cost nothing. Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS). NB: LinkedIn exposes posting dates with daily granularity. | | fetch\_since\_timezone | string | — | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values. | | job\_details | boolean | false | Paid add-on. Visit each job posting page to collect the full description, structured salary, seniority, industries, recruiter and apply link. When off, you get the fields shown in the search results only. Free when the task input is a single job URL, since that posting page is already scraped in full. Costs 1 extra credit per job. | | company\_details | boolean | false | Paid add-on. Visit each hiring company's LinkedIn page to collect website, industry, headcount, followers, founding year, headquarters and specialties. Costs 1 extra credit per job. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "date_posted": "Past week", "job_type": "Full-time", "experience_level": "Mid-Senior level", "workplace_type": "Remote", "max_results": 500, "job_details": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "date_posted": "Past week", "job_type": "Full-time", "experience_level": "Mid-Senior level", "workplace_type": "Remote", "max_results": 500, "job_details": True, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"date_posted": "Past week", "job_type": "Full-time", "experience_level": "Mid-Senior level", "workplace_type": "Remote", "max_results": 500, "job_details": true}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-leads-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your LinkedIn Leads Scraper squid Add URLs or inputs to your **LinkedIn Leads Scraper** squid. Each task object must include the required fields below. Crawler ID: `aa164b3c44d4f435fe5e04ddf6757296` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-leads-scraper/credit-cost Credit cost for the LinkedIn Leads Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Leads | 1 | 1 credit per lead | | Get Profile Details | 1 | 1 credit per profile | | Email Enrichment | 9 | 9 credits per profile enriched. No email = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/linkedin-leads-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from LinkedIn Leads Scraper Retrieve scraped data from your **LinkedIn Leads Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the LinkedIn profile. Example: `https://www.linkedin.com/in/williamhgates` LinkedIn public profile slug used in the profile URL. Example: `williamhgates` First name of the LinkedIn member. Example: `Bill` Last name of the LinkedIn member. Example: `Gates` Full name of the LinkedIn member. Example: `Bill Gates` Email address found or enriched for this LinkedIn member. Example: `bill@microsoft.com` Validation status of the email address (e.g. valid, risky, invalid). Example: `valid` LinkedIn headline / job title of the member. Example: `Co-chair, Bill & Melinda Gates Foundation` LinkedIn profile summary / about section. Example: `Sharing things I'm learning through my foundation work and other interests.` Geographic location of the LinkedIn member. Example: `Seattle, Washington, United States` Industry of the LinkedIn member. Example: `Philanthropic Fundraising Services` LinkedIn internal member ID (numeric vmid). Example: `251749025` Sales Navigator URL for the LinkedIn member. Example: `https://www.linkedin.com/sales/people/251749025` Connection degree between the scraping account and this member (1, 2, 3, Out of Network). Example: `2` URL to see the connections of this LinkedIn member. Example: `https://www.linkedin.com/search/results/people/?facetConnectionOf=%5B%22251749025%22%5D` URL to see mutual connections with this LinkedIn member. Example: `https://www.linkedin.com/search/results/people/?facetNetwork=%5B%22F%22%5D&facetConnectionOf=%5B%22251749025%22%5D` Human-readable text describing mutual connections. Example: `3 mutual connections` Profile picture URL of the LinkedIn member. Example: `https://media.licdn.com/dms/image/v2/example.jpg` Background/banner picture URL of the LinkedIn member. Example: `https://media.licdn.com/dms/image/v2/example-bg.jpg` Whether the member has Creator mode enabled. Example: `true` Whether the member has the Open To Work frame on their profile picture. Example: `false` Number of connections the member has. Example: `500` Number of followers the member has. Example: `35000000` List of skills listed on the member's profile. Example: `['Software Development', 'Philanthropy']` Certifications listed on the member's profile. Example: `[{"name": "AWS Solutions Architect", "authority": "Amazon Web Services"}]` Languages listed on the member's profile. Example: `[{"name": "English", "proficiency": "NATIVE_OR_BILINGUAL"}]` Honors and awards listed on the member's profile. Projects listed on the member's profile. Publications listed on the member's profile. Patents listed on the member's profile. Organizations listed on the member's profile. Courses listed on the member's profile. Whether the member has LinkedIn's verified badge. Example: `false` Whether the member is actively hiring (shows a hiring frame on their profile picture). Example: `false` Most recent job position (structured object). Example: `{}` Job title of the most recent position. Example: `Co-chair` Company name of the most recent position. Example: `Bill & Melinda Gates Foundation` LinkedIn company URL for the most recent position. Example: `https://www.linkedin.com/company/bill-melinda-gates-foundation/` Company logo URL for the most recent position. Example: `https://media.licdn.com/dms/image/v2/example-logo.jpg` Location of the most recent position. Example: `Seattle, WA` Description of the most recent position. Example: `Leading philanthropic initiatives...` Start year of the most recent position. Example: `2000` Start month of the most recent position. Example: `1` End year of the most recent position (null if current) End month of the most recent position (null if current) 2nd most recent job position (structured object). Example: `{}` Job title of the 2nd position Company name of the 2nd position Company URL of the 2nd position Company logo URL of the 2nd position Location of the 2nd position Description of the 2nd position Start year of the 2nd position Start month of the 2nd position End year of the 2nd position End month of the 2nd position 3rd most recent job position (structured object). Example: `{}` Job title of the 3rd position Company name of the 3rd position Company URL of the 3rd position Company logo URL of the 3rd position Location of the 3rd position Description of the 3rd position Start year of the 3rd position Start month of the 3rd position End year of the 3rd position End month of the 3rd position Most recent education entry (school name, field of study, dates). Example: `{}` 2nd education entry. Example: `{}` 3rd education entry. Example: `{}` List of companies the member follows on LinkedIn. Example: `[]` List of LinkedIn groups the member has joined. Example: `[]` First featured post or article on the member's profile. Example: `{}` Second featured post or article. Example: `{}` Third featured post or article. Example: `{}` Full list of all job positions (raw array). Example: `[]` Full list of all education entries (raw array). Example: `[]` ### Company Enrichment Fields The following fields require `enrich_company: true` in settings. LinkedIn numeric identifier of the lead's current company. LinkedIn vanity slug of the lead's current company. Example: `microsoft` Name of the lead's current company as listed on LinkedIn. Example: `Microsoft` Company website URL as listed on LinkedIn. Example: `https://www.microsoft.com` Apex domain of the company's website. Example: `microsoft.com` LinkedIn industry of the company. Example: `Software Development` Employee count range declared by the company. Example: `10,001+ employees` Exact number of LinkedIn members listing this company. Example: `228000` Number of LinkedIn followers of the company. Example: `18000000` Headquarters location as displayed on the company page. Example: `Redmond, Washington, United States` City of the company headquarters. Example: `Redmond` Country code of the company headquarters. Example: `US` Full 'About us' description of the company. Short tagline displayed under the company name. Example: `Empowering every person and organization on the planet to achieve more.` List of specialties declared by the company. Example: `["Business Software", "Developer Tools", "Cloud Computing"]` URL of the company logo image. Example: `https://media.licdn.com/dms/image/v2/microsoft-logo.jpg` Whether LinkedIn displays the verified badge on the company page. Example: `true` Additional enrichment functions enabled for this record. Example: `[]` Timestamp when this record was scraped. Example: `2026-04-01T10:00:00Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 55625, "object": "result", "squid": "be678e3927864c2d61154e02da6170fb", "run": "a84a32dd363a98569fb73eb6084c8c33", "url": "https://www.linkedin.com/in/williamhgates", "public_identifier": "williamhgates", "first_name": "Bill", "last_name": "Gates", "full_name": "Bill Gates", "email": "bill@microsoft.com", "email_status": "valid", "headline": "Co-chair, Bill & Melinda Gates Foundation", "description": "Sharing things I'm learning through my foundation work and other interests.", "location": "Seattle, Washington, United States", "industry": "Philanthropic Fundraising Services", "vmid": "251749025", "sales_nav_url": "https://www.linkedin.com/sales/people/251749025", "connection_degree": "2", "connections_url": "https://www.linkedin.com/search/results/people/?facetConnectionOf=%5B%22251749025%22%5D", "mutual_connections_url": "https://www.linkedin.com/search/results/people/?facetNetwork=%5B%22F%22%5D&facetConnectionOf=%5B%22251749025%22%5D", "mutual_connections_text": "3 mutual connections", "picture_url": "https://media.licdn.com/dms/image/v2/example.jpg", "background_picture_url": "https://media.licdn.com/dms/image/v2/example-bg.jpg", "is_creator": true, "open_to_work": false, "num_connections": 500, "num_followers": 35000000, "skills": [ "Software Development", "Philanthropy" ], "job_1": {}, "job_1_title": "Co-chair", "job_1_company_name": "Bill & Melinda Gates Foundation", "job_1_company_url": "https://www.linkedin.com/company/bill-melinda-gates-foundation/", "job_1_company_logo": "https://media.licdn.com/dms/image/v2/example-logo.jpg", "job_1_location": "Seattle, WA", "job_1_description": "Leading philanthropic initiatives...", "job_1_start_year": 2000, "job_1_start_month": 1, "job_1_end_year": null, "job_1_end_month": null, "job_2": {}, "job_2_title": null, "job_2_company_name": null, "job_2_company_url": null, "job_2_company_logo": null, "job_2_location": null, "job_2_description": null, "job_2_start_year": null, "job_2_start_month": null, "job_2_end_year": null, "job_2_end_month": null, "job_3": {}, "job_3_title": null, "job_3_company_name": null, "job_3_company_url": null, "job_3_company_logo": null, "job_3_location": null, "job_3_description": null, "job_3_start_year": null, "job_3_start_month": null, "job_3_end_year": null, "job_3_end_month": null, "education_1": {}, "education_2": {}, "education_3": {}, "interests_companies": [], "interests_groups": [], "featured_1": {}, "featured_2": {}, "featured_3": {}, "jobs": [], "educations": [], "functions": null, "scraping_time": "2026-04-01T10:00:00Z", "native_id": 55625 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-leads-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the LinkedIn Leads Scraper settings including enrichment options Configure your LinkedIn Leads Scraper squid settings. Control result limits and enable email enrichment or profile detail collection. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | 1000 | Maximum number of leads to collect per task | | **max\_unique\_results\_per\_run** | integer | — | Maximum unique results across all tasks in the entire run | | **skip\_collected\_leads** | boolean | false | Skip profiles already collected by this squid in a previous run, so each run returns only new leads | ## Optional Functions Enable these in the `params.functions` object: | Function | Type | Default | Description | | - | - | - | - | | **email\_enrichment** | boolean | true | Find email addresses for each profile (9 credits per profile where an email is found) | | **scrape\_profile\_details** | boolean | true | Collect additional profile details from each LinkedIn profile page (1 credit per profile) | | **extended\_profile\_data** | boolean | true | Also collect the companies and groups each person follows, and their featured posts (requires scrape\_profile\_details) | | **enrich\_company** | boolean | false | Enrich each lead's current company from its LinkedIn company page: website, domain, industry, headcount, and more (1 credit per lead) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **accounts** | array | Array of linked LinkedIn account hashes (required) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Both `email_enrichment` and `scrape_profile_details` are enabled by default. Disable them if not needed to reduce credit usage. This scraper requires a synced LinkedIn account. Add your LinkedIn cookies in the Accounts section before running. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LinkedIn Leads Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 1000, "functions": { "email_enrichment": true, "scrape_profile_details": true } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "LinkedIn Leads Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 1000, "functions": { "email_enrichment": True, # 9 credits per profile with email "scrape_profile_details": True # 1 credit per profile } } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "LinkedIn Leads Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 1000, "functions": { "email_enrichment": true, "scrape_profile_details": true } } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-posts-commenters-and-likers-scraper/add-tasks POST https://api.lobstr.io/v2/squid/{squid_id}/task Add LinkedIn post URLs to scrape commenters and likers using the lobstr.io API Add LinkedIn post URLs as tasks to your squid. The scraper will extract all users who commented on or reacted to the post, along with their profile information. Crawler ID: `8a309e0e0df48511111a9da6382b2ef8` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## URL Format Use any LinkedIn post URL format: `https://www.linkedin.com/posts/username_post-title-activity-123456789/` `https://www.linkedin.com/feed/update/urn:li:activity:123456789/` You can copy the URL directly from any LinkedIn post. ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **post\_url** | string | Yes | URL of the LinkedIn Post to scrape | Scrape viral posts in your industry to build targeted lead lists from engaged audiences. The scraper extracts both commenters and likers by default. Use settings to toggle each separately. Posts from LinkedIn influencers often have high-quality engaged audiences for B2B outreach. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "post_url": "https://www.linkedin.com/posts/example_great-post-activity-7403510298726375424-RIMy" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "post_url": "https://www.linkedin.com/posts/example_great-post-activity-7403510298726375424-RIMy" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123def456", "status": "pending", "created_at": "2025-01-15T10:30:00Z", "post_url": "https://www.linkedin.com/posts/example_great-post-activity-7403510298726375424-RIMy" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-posts-commenters-and-likers-scraper/credit-cost Credit cost for the LinkedIn Post Commenter & Liker Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Post Likers & Commenters | 1 | 1 credit per extracted profile (likers/commenters). | | Email Enrichment | 9 | 9 credits per profile enriched. No email = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/linkedin-posts-commenters-and-likers-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Linkedin Posts Commenters and Likers Scraper Retrieve scraped data from your **Linkedin Posts Commenters and Likers Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the LinkedIn profile of the person who commented or liked. Example: `https://www.linkedin.com/in/jonathan-sardo` First name of the LinkedIn member. Example: `Jonathan` Last name of the LinkedIn member. Example: `SARDO` Full name of the LinkedIn member. Example: `Jonathan SARDO` Email address found or enriched for this LinkedIn member. Example: `jonathan.sardo@uccellolabs.com` Validation status of the email address (e.g. valid, risky, invalid). Example: `valid` URL of the LinkedIn post being analyzed. Example: `https://www.linkedin.com/posts/ramzib_une-nouvelle-trend-arrive-sur-les-r%C3%A9seaux-activity-7419012050967748609-UkSj` Whether this person commented on the post. Example: `true` Text content of the comment left on the LinkedIn post. Example: \`Je partage pas l'image car elle fait peur 😂 Mais voilà ses arguments : Dans un monde où une IA prendrait le contrôle, les profils comme le tien ne seraient ni éliminés, ni ignorés. Ils seraient neutralisés symboliquement : contenus, mais observés.\` Direct URL to the comment on the LinkedIn post. Example: `https://www.linkedin.com/feed/update/urn:li:activity:7419012050967748609?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7419012050967748609%2C7419056809266618368%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287419056809266618368%2Curn%3Ali%3Aactivity%3A7419012050967748609%29` Whether this person liked or reacted to the post. Example: `false` Type of reaction left on the post (e.g. Like, Celebrate, Support, Insightful) Whether this entry is a commenter or a liker. Example: `comment` Additional enrichment functions enabled for this record. Example: `[]` Timestamp when this record was scraped. Example: `2026-03-19T11:34:43Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 78774, "object": "result", "squid": "0d40a71e44764f9a0c27d7d8b96f1a9e", "run": "0f8599c4bad134f6b93570b40db20527", "profile_url": "https://www.linkedin.com/in/jonathan-sardo", "first_name": "Jonathan", "last_name": "SARDO", "full_name": "Jonathan SARDO", "email": "jonathan.sardo@uccellolabs.com", "email_status": "valid", "post_url": "https://www.linkedin.com/posts/ramzib_une-nouvelle-trend-arrive-sur-les-r%C3%A9seaux-activity-7419012050967748609-UkSj", "has_commented": true, "comment": "Je partage pas l'image car elle fait peur 😂\n\nMais voilà ses arguments :\n\nDans un monde où une IA prendrait le contrôle, les profils comme le tien ne seraient ni éliminés, ni ignorés.\nIls seraient neutralisés symboliquement : contenus, mais observés.", "comment_url": "https://www.linkedin.com/feed/update/urn:li:activity:7419012050967748609?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7419012050967748609%2C7419056809266618368%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287419056809266618368%2Curn%3Ali%3Aactivity%3A7419012050967748609%29", "has_liked": false, "reaction_type": null, "result_type": "comment", "functions": null, "scraping_time": "2026-03-19T11:34:43Z", "native_id": 78774 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-posts-commenters-and-likers-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the LinkedIn Posts Commenters and Likers Scraper settings Configure your LinkedIn Posts Commenters and Likers Scraper squid settings. Control which engagement types to scrape and enable email enrichment. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **scrape\_comments** | boolean | true | Enable to scrape users who commented on the post | | **scrape\_reactions** | boolean | true | Enable to scrape users who reacted (liked) the post | | **email\_enrichment** | boolean | false | Enable email enrichment to find email addresses (9 credits per profile where an email is found) | | **max\_results** | integer | unlimited | Maximum results to collect per post | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Email Enrichment When email enrichment is enabled, lobstr.io will attempt to find email addresses for each profile. **Pricing:** 9 credits per profile where an email is found. No email found = 0 credits charged. Enriched emails include validation status: `valid`, `invalid`, `catch-all`, etc. Set `scrape_comments` to true only if you want users who engaged deeply with the content. Email enrichment costs 9 credits per profile where an email is found. Disable if you don't need emails. Commenters often have higher intent than passive likers - filter accordingly for outreach campaigns. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LinkedIn Posts Commenters and Likers Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "scrape_comments": true, "scrape_reactions": true, "email_enrichment": false, "max_results": 1000 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "name": "LinkedIn Posts Commenters and Likers Scraper (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "scrape_comments": True, "scrape_reactions": True, "email_enrichment": False, "max_results": 1000 } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "LinkedIn Posts Commenters and Likers Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "scrape_comments": true, "scrape_reactions": true, "email_enrichment": false, "max_results": 1000 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-posts-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add LinkedIn URLs to scrape posts Add LinkedIn URLs to your **LinkedIn Posts Scraper** squid. Each task accepts a profile URL (collects recent posts from that member), a company URL (collects recent posts from that company), or a direct post URL (collects that single post). Crawler ID: `6a9159b682cfb187977ae5c645e4df7a` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the LinkedIn Posts Scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `linkedin_url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **linkedin\_url** | string | Yes | LinkedIn profile URL, company URL, or direct post URL | Accepted URL formats: * Profile: `https://www.linkedin.com/in/username/` * Company: `https://www.linkedin.com/company/company-name/` * Post: `https://www.linkedin.com/feed/update/urn:li:activity:1234567890/` This scraper requires a LinkedIn account to be linked to your squid. See [Link Account to Squid](/docs/link-account-to-squid). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"linkedin_url": "https://www.linkedin.com/in/username/"}, {"linkedin_url": "https://www.linkedin.com/company/openai/"} ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "squid": squid_id, "tasks": [ {"linkedin_url": "https://www.linkedin.com/in/username/"}, {"linkedin_url": "https://www.linkedin.com/company/openai/"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2026-06-09T10:00:00.000000", "is_active": true, "params": { "linkedin_url": "https://www.linkedin.com/in/username/" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-posts-scraper/credit-cost Credit cost for the LinkedIn Posts Scraper 1 credit per post. # Get Results Source: https://docs.lobstr.io/examples/linkedin-posts-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped posts from LinkedIn Posts Scraper Retrieve scraped posts from your **LinkedIn Posts Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique LinkedIn activity URN of the post. Example: `urn:li:activity:7202146404788580353` Direct URL of the LinkedIn post. Example: `https://www.linkedin.com/feed/update/urn:li:activity:7202146404788580353` Full text content of the post. ISO datetime when the post was published. Example: `2024-05-31T03:18:32Z` Unix timestamp in milliseconds when the post was published. Example: `1717125512311` Human-readable relative time since the post was published. Example: `2w` Whether this post is a repost/share of another post. Example: `false` Type of the post: `text`, `image`, `video`, `article`, `document`, `poll`, etc. Example: `image` Main/cover image URL of the post. JSON array of all image URLs attached to the post. Type of the post author: `Person` or `Company`. Example: `Person` LinkedIn profile URL of the post author. Example: `https://www.linkedin.com/in/mariela-garcia-de-fabbri` LinkedIn internal profileId (miniProfileUrn) of the post author. Example: `ACoAACDe59sBx8ChxT_OJagid6rniBLlYctSmFg` LinkedIn public slug of the post author. Example: `mariela-garcia-de-fabbri` Full name of the post author. Example: `Mariela Garcia de Fabbri` First name of the post author. Example: `Mariela` Last name of the post author. Example: `Garcia de Fabbri` LinkedIn headline / occupation of the post author. Example: `Peruana. Economista. Líder empresarial.` Profile picture URL of the post author. Background/banner image URL of the post author's profile. Full structured author object (JSON) with `firstName`, `lastName`, `occupation`, `id`, `publicId`, `profileId`, `picture`, `backgroundImage`. Total number of likes/reactions on the post. Example: `62` Total number of comments on the post. Example: `1` Total number of shares/reposts of the post. Example: `0` JSON breakdown of reactions by type. Example: `{"LIKE": 27, "PRAISE": 3, "EMPATHY": 1}` JSON array of hashtag keywords referenced in the post text. Example: `["opentowork", "hiring"]` JSON array of profile and company mentions in the post text, each with `public_id`, `first_name`, `last_name`, `start`, `length`, and `type`. JSON array of inline attributes in the post text (profile mentions, hashtags, URLs, etc.) with character offsets. JSON array of up to 3 top comments, each with `author_name`, `author_url`, `author_picture`, `text`, `date_published`, and `num_likes`. When this post is a repost, the original post payload (JSON) including `urn`, `author_name`, `author_profile_url`, and `text`. Null otherwise. JSON object with structured media attached to the post: article, video, poll, document, or event details beyond plain image URLs. Share audience of the post. Example: `PUBLIC` Whether commenting is disabled on the post. Example: `false` Audience scope allowed to comment. Example: `ALL` Whether reacting to the post is allowed. Whether commenting on the post is allowed. Whether sharing/reposting the post is allowed. Whether this is the root share (original post, not a nested reshare). Original input URL used to discover this post. Example: `https://www.linkedin.com/in/gaspard-lezin/` Timestamp when this record was scraped. Example: `2026-04-21T15:55:00Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 24544, "object": "result", "squid": "7ec19092d4f836fc9515441257ab2aff", "run": "488bc2ee86a324eb6ef20be18e71b824", "urn": "urn:li:activity:7202146404788580353", "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7202146404788580353", "text": "Carmix lovers\nMax Galante Manuela Galante Alberto Parodi De La Cuadra Victor Saldaña Blanco", "posted_at": "2024-05-31T03:18:32Z", "posted_at_timestamp": 1717125512311, "time_since_posted": "2w", "is_repost": false, "post_type": "image", "image": "https://media.licdn.com/dms/image/D4E22AQFsIJ8c-Cf6tA/feedshare-shrink_2048_1536/0/1717125507406", "images": [ "https://media.licdn.com/dms/image/D4E22AQFsIJ8c-Cf6tA/feedshare-shrink_2048_1536/0/1717125507406" ], "author_type": "Person", "author_profile_url": "https://www.linkedin.com/in/mariela-garcia-de-fabbri", "author_profile_id": "ACoAACDe59sBx8ChxT_OJagid6rniBLlYctSmFg", "author_public_id": "mariela-garcia-de-fabbri", "author_full_name": "Mariela Garcia de Fabbri", "author_first_name": "Mariela", "author_last_name": "Garcia de Fabbri", "author_headline": "Peruana. Economista. Líder empresarial. Amante de la familia", "author_picture": "https://media.licdn.com/dms/image/D4E03AQHGA2JeAKPGtA/profile-displayphoto-shrink_100_100/0/1691852952911", "author_background_image": "https://media.licdn.com/dms/image/C4E16AQHTeQPBMnMOdg/profile-displaybackgroundimage-shrink_200_800/0/1636434126831", "author": { "firstName": "Mariela", "lastName": "Garcia de Fabbri", "occupation": "Peruana. Economista. Líder empresarial. Amante de la familia", "id": "551479259", "publicId": "mariela-garcia-de-fabbri", "profileId": "ACoAACDe59sBx8ChxT_OJagid6rniBLlYctSmFg" }, "num_likes": 62, "num_comments": 1, "num_shares": 0, "reaction_counts": { "LIKE": 27, "PRAISE": 3, "EMPATHY": 1 }, "hashtags": [ "opentowork", "hiring" ], "mentions": [ { "public_id": "salihoff", "first_name": "Akmal", "last_name": "Salikhov", "start": 1383, "length": 14, "type": "PROFILE_MENTION" } ], "attributes": [ { "start": 14, "length": 11, "type": "PROFILE_MENTION", "profile": { "firstName": "Max", "lastName": "Galante", "publicId": "massimilianogalante" } } ], "top_comments": [ { "text": "Great post!", "author_name": "John Doe", "author_url": "https://www.linkedin.com/in/john", "author_picture": null, "date_published": "2026-01-30T16:00:00Z", "num_likes": 3 } ], "reshared_post": { "urn": "urn:li:activity:7422993022872612864", "share_urn": "urn:li:ugcPost:7422993022872612864", "author_name": "Original Author", "author_profile_url": "https://www.linkedin.com/in/original", "text": "Original post text" }, "media_details": { "type": "article", "title": "Example Article", "subtitle": "example.com", "url": "https://example.com/article", "thumbnail": "https://..." }, "share_audience": "PUBLIC", "commenting_disabled": false, "allowed_commenters_scope": "ALL", "can_react": true, "can_post_comments": true, "can_share": true, "root_share": true, "profile_input_url": "https://www.linkedin.com/in/gaspard-lezin/", "scraping_time": "2026-04-21T15:55:00Z", "functions": null, "native_id": 24544 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-posts-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure LinkedIn Posts Scraper parameters Configure your **LinkedIn Posts Scraper** squid settings to control how many posts are collected and apply time-based filtering. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of posts to collect per task (per profile or company URL). Ignored when the input is a direct post URL | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the entire run | | **fetch\_since** | string | null | Stop scraping when posts older than this threshold are reached (based on `posted_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS). Ignored when the input is a direct post URL | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values. See [supported timezones](/docs/timezones) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since: "7d"` combined with a scheduled run to monitor LinkedIn activity and capture only new posts each week. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LinkedIn Posts Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 50, "fetch_since": "7d", "fetch_since_timezone": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "LinkedIn Posts Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 50, "fetch_since": "7d", # relative: "24h", "7d", "2w" | absolute: "2026-01-01 00:00:00" "fetch_since_timezone": None # e.g. "Europe/Paris" — only used with absolute fetch_since } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "LinkedIn Posts Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 50, "fetch_since": "7d", "fetch_since_timezone": null } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-profile-email-scraper-no-login/add-tasks POST https://api.lobstr.io/v1/tasks Add LinkedIn profile URLs to scrape without a LinkedIn account Add LinkedIn profile URLs to your **LinkedIn Profile & Email Scraper (No Login)** squid. No LinkedIn account is required. Crawler ID: `e7c4200bab5942e5329f711e26c0666b` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the LinkedIn Profile & Email Scraper (No Login) | | **tasks** | array | Yes | Array of task objects, each containing a `linkedin_url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **linkedin\_url** | string | Yes | LinkedIn profile URL (e.g. `https://www.linkedin.com/in/williamhgates`) or bare slug (e.g. `williamhgates`) | ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "linkedin_url": "https://www.linkedin.com/in/williamhgates" }, { "linkedin_url": "https://www.linkedin.com/in/jeffweiner08" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "squid": squid_id, "tasks": [ {"linkedin_url": "https://www.linkedin.com/in/williamhgates"}, {"linkedin_url": "https://www.linkedin.com/in/jeffweiner08"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "created_at": "2026-06-09T10:00:00.000000", "is_active": true, "params": { "linkedin_url": "https://www.linkedin.com/in/williamhgates" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-profile-email-scraper-no-login/credit-cost Credit cost for the LinkedIn Profile & Email Scraper (No Login) | Function | Cost (credits) | Notes | | - | - | - | | Export Profile | 3 | 3 credits per profile | | Email Enrichment | 9 | 9 credits per profile enriched. No email = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/linkedin-profile-email-scraper-no-login/get-results GET https://api.lobstr.io/v1/results Retrieve scraped profiles from LinkedIn Profile & Email Scraper (No Login) Retrieve scraped profiles from your **LinkedIn Profile & Email Scraper (No Login)** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: First and last name concatenated. Example: `Bill Gates` First name on the profile. Example: `Bill` Last name on the profile. Example: `Gates` Email found via Lobstr.io's enrichment service. Only populated when `email_enrichment` is enabled. Validation status of the enriched email: `valid`, `risky`, etc. Profile headline — the short tagline shown under the name. Example: `Co-chair, Bill & Melinda Gates Foundation` Full About / summary section of the profile. First few skill names joined with `•`. Example: `Leadership • Strategic Planning • Philanthropy` Human-readable location string from the profile. Example: `Seattle, Washington, United States` ISO country code resolved from the profile's geo location. Example: `US` Resolved industry name. Example: `Philanthropic Fundraising Services` JSON array of work positions: title, company, location, employment type, dates, and description. JSON array of education entries: school, degree, field of study, dates, and description. JSON array of skills with name and entity URN. JSON array of certifications: name, issuer, license number, dates, URL, and issuing authority. JSON array of courses: name, course number, and school association. JSON array of projects: title, description, URL, and dates. JSON array of publications: name, publisher, description, URL, and published date. JSON array of honors and awards: title, issuer, description, and issued date. JSON array of organizations, clubs, or professional bodies the member is affiliated with. JSON array of standardized test scores listed on the profile (e.g. TOEFL, TOEIC, GMAT). JSON array of languages with name and proficiency level. JSON array of volunteer experiences: role, organization, cause, description, and dates. JSON array of volunteer cause codes the member supports. JSON array of items in the Featured section: posts, articles, links, and photos. Direct URL to the highest-resolution profile picture available. Direct URL to the largest cover/background image available. Public LinkedIn profile URL. Example: `https://www.linkedin.com/in/williamhgates` Public LinkedIn profile identifier. Example: `williamhgates` LinkedIn fsd\_profile entity URN. Example: `urn:li:fsd_profile:ACoAAA8BYqEBhiA97dDu2Y4PxFPgBcPlMHXHQw4` Stable numeric member URN. Whether the member has LinkedIn Premium. Whether the member is a LinkedIn Influencer. Whether the profile has Creator Mode enabled. Whether the LinkedIn Premium badge is displayed on the profile. Whether the profile has been memorialized (account of a deceased member). Connection distance from the scraping account: `DISTANCE_1`, `DISTANCE_2`, `DISTANCE_3`, or `OUT_OF_NETWORK`. Profile's primary display locale code. Example: `en_US` JSON array of all locales supported on the profile, each as `{country, language}`. JSON array of the profile headline in each supported locale, each as `{headline, locale}`. JSON array of the About/summary section in each supported locale, each as `{summary, locale}`. JSON array of recommended/related profiles surfaced in the same response. UTC timestamp when the profile was scraped. ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 81732, "object": "result", "squid": "e35dbeaaa8053607b4acc68ce18f479c", "run": "2edbe230bc318e0c262749985ddeafac", "full_name": "Bill Gates", "first_name": "Bill", "last_name": "Gates", "email": "bill@gatesfoundation.org", "email_status": "valid", "headline": "Co-chair, Bill & Melinda Gates Foundation", "summary": "Co-chair of the Bill & Melinda Gates Foundation…", "top_skills": "Pharmacology • Patient Counseling", "location_name": "Seattle, Washington, United States", "country_code": "US", "industry_name": "Pharmaceutical Manufacturing", "positions": [], "educations": [], "skills": [], "certifications": [], "courses": [], "projects": [], "publications": [], "honors_and_awards": [], "organizations": [ { "name": "Forum ENSAE Paristech", "position_held": "Treasurer", "description": "…", "date_range": {} } ], "test_scores": [ { "name": "TOEFL IBT", "score": "111/120", "date": { "year": 2019, "month": 10 }, "description": null } ], "languages": [], "volunteer_experiences": [], "volunteer_causes": [ "HEALTH", "ANIMAL_WELFARE" ], "featured_items": [ { "title": "…", "description": "…", "provider_name": "Vogue", "url": "…", "image_url": "…" } ], "profile_picture_url": "https://media.licdn.com/dms/image/v2/.../profile-displayphoto-shrink_800_800/...", "background_image_url": "https://media.licdn.com/dms/image/v2/.../profile-displaybackgroundimage-shrink_350_1400/...", "linkedin_url": "https://www.linkedin.com/in/williamhgates", "slug": "williamhgates", "entity_urn": "urn:li:fsd_profile:ACoAACLevxsBfWQoDUYkHyCP2jzl81cDAvckQEI", "object_urn": "urn:li:member:585023259", "premium": false, "influencer": false, "is_creator": false, "show_premium_subscriber_badge": false, "memorialized": false, "member_distance": "OUT_OF_NETWORK", "primary_locale": "en_US", "supported_locales": [ { "country": "US", "language": "en" } ], "multi_locale_headline": [ { "headline": "Co-chair, Bill & Melinda Gates Foundation", "locale": "en_US" } ], "multi_locale_summary": [ { "summary": "Co-chair…", "locale": "en_US" } ], "more_profiles": [], "scraping_time": "2026-05-06T15:11:14Z", "functions": null, "native_id": 81732 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-profile-email-scraper-no-login/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the LinkedIn Profile & Email Scraper (No Login) settings Configure your **LinkedIn Profile & Email Scraper (No Login)** squid settings. Enable email enrichment to find verified email addresses for each profile. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **email\_enrichment** | boolean | true | Find verified email addresses using Lobstr.io's enrichment service. Costs 9 credits per enriched profile. No email found = 0 credits. | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Email enrichment (`email_enrichment`) is enabled by default. Disable it if you only need profile data and want to avoid enrichment credit usage. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LinkedIn Profile & Email Scraper (No Login) (1)", "concurrency": 2, "export_unique_results": true, "to_complete": true, "params": { "email_enrichment": true, "max_unique_results_per_run": 500 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "LinkedIn Profile & Email Scraper (No Login) (1)", "concurrency": 2, "export_unique_results": True, "to_complete": True, "params": { "email_enrichment": True, "max_unique_results_per_run": 500 } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "LinkedIn Profile & Email Scraper (No Login) (1)", "concurrency": 2, "export_unique_results": true, "to_complete": true, "params": { "email_enrichment": true, "max_unique_results_per_run": 500 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-profile-scraper/add-tasks POST https://api.lobstr.io/v2/squid/{squid_id}/task Add LinkedIn profile URLs to scrape using the lobstr.io API Add LinkedIn profile URLs as tasks to your squid. The scraper will extract comprehensive profile data from each LinkedIn profile you provide. You can use various LinkedIn profile URL formats, including international versions. Crawler ID: `5c11752d8687df2332c08247c4fb655a` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## URL Formats **Supported URL formats:** `https://www.linkedin.com/in/username/` `https://linkedin.com/in/username` `https://fr.linkedin.com/in/username/` (international) The URL must be a valid LinkedIn profile URL containing `/in/` followed by the user's identifier. ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | LinkedIn profile URL to scrape | You can add profiles in bulk by making multiple API requests or using the batch upload feature. The scraper accepts both standard and international LinkedIn profile URLs (e.g., fr.linkedin.com, de.linkedin.com). Use Sales Navigator lead export URLs or regular LinkedIn profile URLs - both work with this scraper. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.linkedin.com/in/williamhgates/" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "url": "https://www.linkedin.com/in/williamhgates/" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123def456", "squid_id": "YOUR_SQUID_ID", "url": "https://www.linkedin.com/in/williamhgates/", "status": "pending", "created_at": "2024-01-15T10:30:00Z" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-profile-scraper/credit-cost Credit cost for the LinkedIn Profile Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Profile | 1 | 1 credit per profile. | | Email Enrichment | 9 | 9 credits per profile enriched. No email = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/linkedin-profile-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Linkedin Profile Scraper Retrieve scraped data from your **Linkedin Profile Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the LinkedIn profile. Example: `https://www.linkedin.com/in/david-shibley` LinkedIn public profile slug used in the profile URL. Example: `david-shibley` First name of the LinkedIn member. Example: `David` Last name of the LinkedIn member. Example: `Shibley` Full name of the LinkedIn member. Example: `David Shibley` Email address found or enriched for this LinkedIn member. Example: `dave@melcap.com` Validation status of the email address (e.g. valid, risky, invalid). Example: `valid` Professional headline shown below the name on the LinkedIn profile. Example: `Vice President of Business Strategy at Cassidy Advertising` About or summary text from the LinkedIn profile. Example: `With over 5 years of professional client services experience, currently serving as Vice President of Business Strategy at Cassidy Advertising & Consulting, contributing to strategic planning and client engagement. Committed to fostering collaborative growth and aligning strategies to advance organizational goals. Past roles as Investment Banking Associate and Staff Accountant honed expertise in financial data analysis, reporting, and deal structuring. Skilled in business strategy, client relations, and leveraging insights and analytics for impactful outcomes.` Location shown on the LinkedIn profile. Example: `Cleveland, Ohio, United States` Industry the person works in as listed on LinkedIn. Example: `Marketing & Advertising` LinkedIn internal member ID (vmid). Example: `ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc` URL to the person's LinkedIn Sales Navigator profile. Example: `https://www.linkedin.com/sales/people/ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc` Degree of connection between this profile and the scraping account (1st, 2nd, 3rd). Example: `3` URL to this profile's connections list on LinkedIn. Example: `https://www.linkedin.com/search/results/people/?facetConnectionOf=%5B%22ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc%22%5D&facetNetwork=%5B%22F%22%2C%22S%22%5D&origin=MEMBER_PROFILE_CANNED_SEARCH` URL to the mutual connections between this profile and the scraping account. Example: `https://www.linkedin.com/search/results/people/?facetNetwork=%5B%22F%22%5D&facetConnectionOf=%5B%22ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc%22%5D&origin=MEMBER_PROFILE_CANNED_SEARCH&RESULT_TYPE=PEOPLE` Text summary describing mutual connections. Example: `0 mutual connections` URL of the LinkedIn profile picture. Example: `https://media.licdn.com/dms/image/v2/D5603AQFQQKystZJSAA/profile-displayphoto-scale_400_400/B56ZmfjYy4JkAk-/0/1759318479293?e=1775692800&v=beta&t=SAzzG76z7sunESZpozYWL5uc-nAg4BMMDjfUwIIXtAk` URL of the LinkedIn profile's background banner image. Example: `https://media.licdn.com/dms/image/v2/D4D16AQFV1Mlvp-78Uw/profile-displaybackgroundimage-shrink_200_800/B4DZm_ItgpGkAU-/0/1759848357816?e=1775692800&v=beta&t=Ix85xp8Ly5B8H6R94ZCMU_T9WAkTxkZJmeyRacB9GGk` Whether the account has creator mode enabled on LinkedIn. Example: `False` Whether the profile has the Open to Work banner enabled. Example: `false` Total number of 1st-degree LinkedIn connections. Example: `1344` Total number of LinkedIn followers. Example: `1348` Skills listed on the LinkedIn profile. Example: `['Microsoft Excel', 'Event Planning', 'Public Speaking', 'PowerPoint', 'Leadership', 'Microsoft PowerPoint', 'Social Media', 'Microsoft Office', 'Microsoft Word', 'Customer Service', 'Management', 'Strategic Planning']` JSON object for the 1st work experience entry on the LinkedIn profile. Example: `{'title': 'Vice President of Business Strategy', 'end_year': None, 'location': None, 'end_month': None, 'start_year': 2025, 'company_url': 'https://www.linkedin.com/company/1620351/', 'description': None, 'start_month': 9, 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQGNJvt99hfofA/company-logo_400_400/company-logo_400_400/0/1630579191372/cassidy_advertising__consulting_llc_logo?e=1775692800&v=beta&t=KDDsoQaD9Swq9jcjc27uPPZCez_CmDuWLMlhr5yuvSc', 'company_name': 'Cassidy Advertising & Consulting LLC'}` JSON object for the 2nd work experience entry on the LinkedIn profile. Example: `{'title': 'Investment Banking Associate', 'end_year': 2025, 'location': None, 'end_month': 8, 'start_year': 2024, 'company_url': 'https://www.linkedin.com/company/5562018/', 'description': None, 'start_month': 1, 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM', 'company_name': 'MelCap Partners, LLC'}` JSON object for the 3rd work experience entry on the LinkedIn profile. Example: `{'title': 'Investment Banking Analyst', 'end_year': 2023, 'location': None, 'end_month': 12, 'start_year': 2022, 'company_url': 'https://www.linkedin.com/company/5562018/', 'description': None, 'start_month': 8, 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM', 'company_name': 'MelCap Partners'}` JSON object for the 4th work experience entry on the LinkedIn profile. Example: `{'title': 'Audit Staff Accountant', 'end_year': 2022, 'location': 'Cleveland, Ohio, United States', 'end_month': 8, 'start_year': 2020, 'company_url': 'https://www.linkedin.com/company/21984/', 'description': None, 'start_month': 9, 'company_logo': 'https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4', 'company_name': 'Marcum LLP'}` JSON object for the 5th work experience entry on the LinkedIn profile. Example: `{'title': 'Graduate Student', 'end_year': 2020, 'location': 'South Bend, Indiana Area', 'end_month': 5, 'start_year': 2019, 'company_url': 'https://www.linkedin.com/company/15102069/', 'description': 'Masters of Science in Accountancy Class of 2020', 'start_month': 8, 'company_logo': 'https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA', 'company_name': 'University of Notre Dame - Mendoza College of Business'}` JSON object for the 6th work experience entry on the LinkedIn profile. Example: `{}` JSON object for the 7th work experience entry on the LinkedIn profile. Example: `{}` JSON object for the 8th work experience entry on the LinkedIn profile. Example: `{}` JSON object for the 9th work experience entry on the LinkedIn profile. Example: `{}` JSON object for the 10th work experience entry on the LinkedIn profile. Example: `{}` Job title for the 1st work experience. Example: `Vice President of Business Strategy` Description text for the 1st work experience Location of the 1st work experience Start year of the 1st work experience. Example: `2025` Start month of the 1st work experience. Example: `9` End year of the 1st work experience (null if current) End month of the 1st work experience (null if current) Company name for the 1st work experience. Example: `Cassidy Advertising & Consulting LLC` LinkedIn URL of the company for the 1st work experience. Example: `https://www.linkedin.com/company/1620351/` Logo URL of the company for the 1st work experience. Example: `https://media.licdn.com/dms/image/v2/C4E0BAQGNJvt99hfofA/company-logo_400_400/company-logo_400_400/0/1630579191372/cassidy_advertising__consulting_llc_logo?e=1775692800&v=beta&t=KDDsoQaD9Swq9jcjc27uPPZCez_CmDuWLMlhr5yuvSc` Job title for the 2nd work experience. Example: `Investment Banking Associate` Description text for the 2nd work experience Location of the 2nd work experience Start year of the 2nd work experience. Example: `2024` Start month of the 2nd work experience. Example: `1` End year of the 2nd work experience (null if current). Example: `2025` End month of the 2nd work experience (null if current). Example: `8` Company name for the 2nd work experience. Example: `MelCap Partners, LLC` LinkedIn URL of the company for the 2nd work experience. Example: `https://www.linkedin.com/company/5562018/` Logo URL of the company for the 2nd work experience. Example: `https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM` Job title for the 3rd work experience. Example: `Investment Banking Analyst` Description text for the 3rd work experience Location of the 3rd work experience Start year of the 3rd work experience. Example: `2022` Start month of the 3rd work experience. Example: `8` End year of the 3rd work experience (null if current). Example: `2023` End month of the 3rd work experience (null if current). Example: `12` Company name for the 3rd work experience. Example: `MelCap Partners` LinkedIn URL of the company for the 3rd work experience. Example: `https://www.linkedin.com/company/5562018/` Logo URL of the company for the 3rd work experience. Example: `https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM` Job title for the 4th work experience. Example: `Audit Staff Accountant` Description text for the 4th work experience Location of the 4th work experience. Example: `Cleveland, Ohio, United States` Start year of the 4th work experience. Example: `2020` Start month of the 4th work experience. Example: `9` End year of the 4th work experience (null if current). Example: `2022` End month of the 4th work experience (null if current). Example: `8` Company name for the 4th work experience. Example: `Marcum LLP` LinkedIn URL of the company for the 4th work experience. Example: `https://www.linkedin.com/company/21984/` Logo URL of the company for the 4th work experience. Example: `https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4` Job title for the 4th work experience. Example: `Audit Staff Accountant` Description text for the 4th work experience Location of the 4th work experience. Example: `Cleveland, Ohio, United States` Start year of the 4th work experience. Example: `2020` Start month of the 4th work experience. Example: `9` End year of the 4th work experience (null if current). Example: `2022` End month of the 4th work experience (null if current). Example: `8` Company name for the 4th work experience. Example: `Marcum LLP` LinkedIn URL of the company for the 4th work experience. Example: `https://www.linkedin.com/company/21984/` Logo URL of the company for the 4th work experience. Example: `https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4` Job title for the 5th work experience. Example: `Graduate Student` Description text for the 5th work experience. Example: `Masters of Science in Accountancy Class of 2020` Location of the 5th work experience. Example: `South Bend, Indiana Area` Start year of the 5th work experience. Example: `2019` Start month of the 5th work experience. Example: `8` End year of the 5th work experience (null if current). Example: `2020` End month of the 5th work experience (null if current). Example: `5` Company name for the 5th work experience. Example: `University of Notre Dame - Mendoza College of Business` LinkedIn URL of the company for the 5th work experience. Example: `https://www.linkedin.com/company/15102069/` Logo URL of the company for the 5th work experience. Example: `https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA` Job title for the 6th work experience Description text for the 6th work experience Location of the 6th work experience Start year of the 6th work experience Start month of the 6th work experience End year of the 6th work experience (null if current) End month of the 6th work experience (null if current) Company name for the 6th work experience LinkedIn URL of the company for the 6th work experience Logo URL of the company for the 6th work experience Job title for the 7th work experience Description text for the 7th work experience Location of the 7th work experience Start year of the 7th work experience Start month of the 7th work experience End year of the 7th work experience (null if current) End month of the 7th work experience (null if current) Company name for the 7th work experience LinkedIn URL of the company for the 7th work experience Logo URL of the company for the 7th work experience Job title for the 8th work experience Description text for the 8th work experience Location of the 8th work experience Start year of the 8th work experience Start month of the 8th work experience End year of the 8th work experience (null if current) End month of the 8th work experience (null if current) Company name for the 8th work experience LinkedIn URL of the company for the 8th work experience Logo URL of the company for the 8th work experience Job title for the 9th work experience Description text for the 9th work experience Location of the 9th work experience Start year of the 9th work experience Start month of the 9th work experience End year of the 9th work experience (null if current) End month of the 9th work experience (null if current) Company name for the 9th work experience LinkedIn URL of the company for the 9th work experience Logo URL of the company for the 9th work experience Job title for the 10th work experience Description text for the 10th work experience Location of the 10th work experience Start year of the 10th work experience Start month of the 10th work experience End year of the 10th work experience (null if current) End month of the 10th work experience (null if current) Company name for the 10th work experience LinkedIn URL of the company for the 10th work experience Logo URL of the company for the 10th work experience JSON object for the 1st education entry on the LinkedIn profile. Example: `{'grade': None, 'end_year': 2015, 'activities': None, 'school_urn': 'urn:li:fsd_school:3185119', 'start_year': 2011, 'description': 'Varsity Football Team Captain', 'school_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHxGZiajzHBHg/company-logo_400_400/company-logo_400_400/0/1631371114746/saint_ignatius_high_school_logo?e=1775692800&v=beta&t=p6mYmQOidWylws1rdca8euxkwEhPAMI-Rp2veaCuCbY', 'school_name': 'Saint Ignatius High School', 'field_of_study': ''}` JSON object for the 2nd education entry on the LinkedIn profile. Example: `{'grade': None, 'end_year': 2020, 'activities': None, 'school_urn': 'urn:li:fsd_school:18367', 'start_year': 2019, 'description': None, 'school_logo': 'https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA', 'school_name': 'University of Notre Dame - Mendoza College of Business', 'field_of_study': 'Master of Science - MS, Accounting'}` JSON object for the 3rd education entry on the LinkedIn profile. Example: `{'grade': None, 'end_year': 2019, 'activities': None, 'school_urn': 'urn:li:fsd_school:18771', 'start_year': 2015, 'description': 'Minors: Finance and Sport Management', 'school_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQEJmXnCQ8bRCQ/company-logo_400_400/company-logo_400_400/0/1631342299438?e=1775692800&v=beta&t=jfaD9Y6mPPF_b_eV4enhqur75TJyll9xFtWSBrsBfiY', 'school_name': 'Elon University', 'field_of_study': 'Bachelor of Science - BS, Accounting'}` JSON object for the 4th education entry on the LinkedIn profile. Example: `{}` JSON object for the 5th education entry on the LinkedIn profile. Example: `{}` JSON object for the 6th education entry on the LinkedIn profile. Example: `{}` JSON object for the 7th education entry on the LinkedIn profile. Example: `{}` JSON object for the 8th education entry on the LinkedIn profile. Example: `{}` JSON object for the 9th education entry on the LinkedIn profile. Example: `{}` JSON object for the 10th education entry on the LinkedIn profile. Example: `{}` LinkedIn companies this person follows. Example: `[{'company_id': '8450', 'company_url': 'https://www.linkedin.com/company/8450/', 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQFV98UAyjaH7g/company-logo_200_200/company-logo_200_200/0/1668198003810/aicpa_logo?e=1775692800&v=beta&t=nzwdgDWFggL9e_IrnzlRQw2a04M9BnaFgYSh99B2dng', 'is_following': False, 'follower_count': 318176}, {'company_id': '412132', 'company_url': 'https://www.linkedin.com/company/412132/', 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHxGZiajzHBHg/company-logo_200_200/company-logo_200_200/0/1631371114746/saint_ignatius_high_school_logo?e=1775692800&v=beta&t=eYfT7qH5mXofSmzMiRRVY34mk7a9FzMgTn5pLJ26n38', 'is_following': False, 'follower_count': 7776}, {'company_id': '21984', 'company_url': 'https://www.linkedin.com/company/21984/', 'company_logo': 'https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_200_200/company-logo_200_200/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=nziUMRa2SmWy96tSFeNpG-pZXegSYPE8DvIpMHPp35s', 'is_following': False, 'follower_count': 50065}]` LinkedIn groups this person is a member of. Example: `[{'group_id': '12068263', 'group_url': 'https://www.linkedin.com/groups/12068263/', 'group_logo': 'https://media.licdn.com/dms/image/v2/C4E07AQGGOVB8anAuQQ/group-logo_image-shrink_200x200/group-logo_image-shrink_200x200/0/1631001642624?e=1774551600&v=beta&t=wpXl75yxrLXA8drFPHyA81pPgEooE3KGSfxo7Mlkj9U', 'group_name': "Elon University's Beta Alpha Psi Chapter"}, {'group_id': '61715', 'group_url': 'https://www.linkedin.com/groups/61715/', 'group_logo': 'https://media.licdn.com/dms/image/v2/C4D07AQGRy12-ZPhupw/group-logo_image-shrink_200x200/group-logo_image-shrink_200x200/0/1631357469421?e=1774551600&v=beta&t=PN4CDsrFH7G43QPlxO9A3mVHcJ2lM9BTDK8f-V2Q5UE', 'group_name': 'Ignatius Men Forever - Saint Ignatius High School, Cleveland'}]` 1st featured content item pinned on the LinkedIn profile. Example: `{'text': "I'm thrilled to be joining the executive team at Cassidy Advertising & Consulting LLC alongside Laura Berena and Hailey Cassidy. After 5+ years of helping middle-market companies with strategic financial services, I'm looking forward to bringing that experience into a new industry.", 'post_url': 'https://www.linkedin.com/feed/update/urn:li:activity:7379139520778321921?updateEntityUrn=urn%3Ali%3Afs_feedUpdate%3A%28V2%2Curn%3Ali%3Aactivity%3A7379139520778321921%29', 'post_urn': 'urn:li:activity:7379139520778321921', 'num_likes': 157, 'num_comments': 27}` 2nd featured content item pinned on the LinkedIn profile. Example: `{}` 3rd featured content item pinned on the LinkedIn profile. Example: `{}` 4th featured content item pinned on the LinkedIn profile. Example: `{}` 5th featured content item pinned on the LinkedIn profile. Example: `{}` Full work experience history as a JSON array. Example: `[{'title': 'Vice President of Business Strategy', 'description': None, 'location': None, 'start_year': 2025, 'start_month': 9, 'end_year': None, 'end_month': None, 'company_name': 'Cassidy Advertising & Consulting LLC', 'company_url': 'https://www.linkedin.com/company/1620351/', 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQGNJvt99hfofA/company-logo_400_400/company-logo_400_400/0/1630579191372/cassidy_advertising__consulting_llc_logo?e=1775692800&v=beta&t=KDDsoQaD9Swq9jcjc27uPPZCez_CmDuWLMlhr5yuvSc'}, {'title': 'Investment Banking Associate', 'description': None, 'location': None, 'start_year': 2024, 'start_month': 1, 'end_year': 2025, 'end_month': 8, 'company_name': 'MelCap Partners, LLC', 'company_url': 'https://www.linkedin.com/company/5562018/', 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM'}, {'title': 'Investment Banking Analyst', 'description': None, 'location': None, 'start_year': 2022, 'start_month': 8, 'end_year': 2023, 'end_month': 12, 'company_name': 'MelCap Partners', 'company_url': 'https://www.linkedin.com/company/5562018/', 'company_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM'}, {'title': 'Audit Staff Accountant', 'description': None, 'location': 'Cleveland, Ohio, United States', 'start_year': 2020, 'start_month': 9, 'end_year': 2022, 'end_month': 8, 'company_name': 'Marcum LLP', 'company_url': 'https://www.linkedin.com/company/21984/', 'company_logo': 'https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4'}, {'title': 'Graduate Student', 'description': 'Masters of Science in Accountancy Class of 2020', 'location': 'South Bend, Indiana Area', 'start_year': 2019, 'start_month': 8, 'end_year': 2020, 'end_month': 5, 'company_name': 'University of Notre Dame - Mendoza College of Business', 'company_url': 'https://www.linkedin.com/company/15102069/', 'company_logo': 'https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA'}]` Full education history as a JSON array. Example: `[{'school_name': 'Saint Ignatius High School', 'field_of_study': '', 'start_year': 2011, 'end_year': 2015, 'activities': None, 'grade': None, 'school_urn': 'urn:li:fsd_school:3185119', 'school_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQHxGZiajzHBHg/company-logo_400_400/company-logo_400_400/0/1631371114746/saint_ignatius_high_school_logo?e=1775692800&v=beta&t=p6mYmQOidWylws1rdca8euxkwEhPAMI-Rp2veaCuCbY'}, {'school_name': 'University of Notre Dame - Mendoza College of Business', 'field_of_study': 'Master of Science - MS, Accounting', 'start_year': 2019, 'end_year': 2020, 'activities': None, 'grade': None, 'school_urn': 'urn:li:fsd_school:18367', 'school_logo': 'https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA'}, {'school_name': 'Elon University', 'field_of_study': 'Bachelor of Science - BS, Accounting', 'start_year': 2015, 'end_year': 2019, 'activities': None, 'grade': None, 'school_urn': 'urn:li:fsd_school:18771', 'school_logo': 'https://media.licdn.com/dms/image/v2/C4E0BAQEJmXnCQ8bRCQ/company-logo_400_400/company-logo_400_400/0/1631342299438?e=1775692800&v=beta&t=jfaD9Y6mPPF_b_eV4enhqur75TJyll9xFtWSBrsBfiY'}]` Additional enrichment functions enabled for this record. Example: `[]` Timestamp when this LinkedIn profile was scraped. Example: `2025-07-01T12:00:00Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 88751, "object": "result", "squid": "2df91f8a7923f6e4f620d78357fe92aa", "run": "68ff47d749e9e15917fc81691a092f78", "url": "https://www.linkedin.com/in/david-shibley", "public_identifier": "david-shibley", "first_name": "David", "last_name": "Shibley", "full_name": "David Shibley", "email": "dave@melcap.com", "email_status": "valid", "headline": "Vice President of Business Strategy at Cassidy Advertising", "description": "With over 5 years of professional client services experience, currently serving as Vice President of Business Strategy at Cassidy Advertising & Consulting, contributing to strategic planning and client engagement. Committed to fostering collaborative growth and aligning strategies to advance organizational goals. Past roles as Investment Banking Associate and Staff Accountant honed expertise in financial data analysis, reporting, and deal structuring. Skilled in business strategy, client relations, and leveraging insights and analytics for impactful outcomes.", "location": "Cleveland, Ohio, United States", "industry": "Marketing & Advertising", "vmid": "ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc", "sales_nav_url": "https://www.linkedin.com/sales/people/ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc", "connection_degree": "3", "connections_url": "https://www.linkedin.com/search/results/people/?facetConnectionOf=%5B%22ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc%22%5D&facetNetwork=%5B%22F%22%2C%22S%22%5D&origin=MEMBER_PROFILE_CANNED_SEARCH", "mutual_connections_url": "https://www.linkedin.com/search/results/people/?facetNetwork=%5B%22F%22%5D&facetConnectionOf=%5B%22ACoAABBSYCEB2RG5DGmF2FHaW3QIGLMpHLChBRc%22%5D&origin=MEMBER_PROFILE_CANNED_SEARCH&RESULT_TYPE=PEOPLE", "mutual_connections_text": "0 mutual connections", "picture_url": "https://media.licdn.com/dms/image/v2/D5603AQFQQKystZJSAA/profile-displayphoto-scale_400_400/B56ZmfjYy4JkAk-/0/1759318479293?e=1775692800&v=beta&t=SAzzG76z7sunESZpozYWL5uc-nAg4BMMDjfUwIIXtAk", "background_picture_url": "https://media.licdn.com/dms/image/v2/D4D16AQFV1Mlvp-78Uw/profile-displaybackgroundimage-shrink_200_800/B4DZm_ItgpGkAU-/0/1759848357816?e=1775692800&v=beta&t=Ix85xp8Ly5B8H6R94ZCMU_T9WAkTxkZJmeyRacB9GGk", "is_creator": "False", "open_to_work": false, "num_connections": 1344, "num_followers": 1348, "skills": [ "Microsoft Excel", "Event Planning", "Public Speaking", "PowerPoint", "Leadership", "Microsoft PowerPoint", "Social Media", "Microsoft Office", "Microsoft Word", "Customer Service", "Management", "Strategic Planning" ], "job_1": { "title": "Vice President of Business Strategy", "end_year": null, "location": null, "end_month": null, "start_year": 2025, "company_url": "https://www.linkedin.com/company/1620351/", "description": null, "start_month": 9, "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQGNJvt99hfofA/company-logo_400_400/company-logo_400_400/0/1630579191372/cassidy_advertising__consulting_llc_logo?e=1775692800&v=beta&t=KDDsoQaD9Swq9jcjc27uPPZCez_CmDuWLMlhr5yuvSc", "company_name": "Cassidy Advertising & Consulting LLC" }, "job_2": { "title": "Investment Banking Associate", "end_year": 2025, "location": null, "end_month": 8, "start_year": 2024, "company_url": "https://www.linkedin.com/company/5562018/", "description": null, "start_month": 1, "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM", "company_name": "MelCap Partners, LLC" }, "job_3": { "title": "Investment Banking Analyst", "end_year": 2023, "location": null, "end_month": 12, "start_year": 2022, "company_url": "https://www.linkedin.com/company/5562018/", "description": null, "start_month": 8, "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM", "company_name": "MelCap Partners" }, "job_4": { "title": "Audit Staff Accountant", "end_year": 2022, "location": "Cleveland, Ohio, United States", "end_month": 8, "start_year": 2020, "company_url": "https://www.linkedin.com/company/21984/", "description": null, "start_month": 9, "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4", "company_name": "Marcum LLP" }, "job_5": { "title": "Graduate Student", "end_year": 2020, "location": "South Bend, Indiana Area", "end_month": 5, "start_year": 2019, "company_url": "https://www.linkedin.com/company/15102069/", "description": "Masters of Science in Accountancy Class of 2020", "start_month": 8, "company_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA", "company_name": "University of Notre Dame - Mendoza College of Business" }, "job_6": {}, "job_7": {}, "job_8": {}, "job_9": {}, "job_10": {}, "job_1_title": "Vice President of Business Strategy", "job_1_description": "", "job_1_location": "", "job_1_start_year": 2025, "job_1_start_month": 9, "job_1_end_year": null, "job_1_end_month": null, "job_1_company_name": "Cassidy Advertising & Consulting LLC", "job_1_company_url": "https://www.linkedin.com/company/1620351/", "job_1_company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQGNJvt99hfofA/company-logo_400_400/company-logo_400_400/0/1630579191372/cassidy_advertising__consulting_llc_logo?e=1775692800&v=beta&t=KDDsoQaD9Swq9jcjc27uPPZCez_CmDuWLMlhr5yuvSc", "job_2_title": "Investment Banking Associate", "job_2_description": "", "job_2_location": "", "job_2_start_year": 2024, "job_2_start_month": 1, "job_2_end_year": 2025, "job_2_end_month": 8, "job_2_company_name": "MelCap Partners, LLC", "job_2_company_url": "https://www.linkedin.com/company/5562018/", "job_2_company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM", "job_3_title": "Investment Banking Analyst", "job_3_description": "", "job_3_location": "", "job_3_start_year": 2022, "job_3_start_month": 8, "job_3_end_year": 2023, "job_3_end_month": 12, "job_3_company_name": "MelCap Partners", "job_3_company_url": "https://www.linkedin.com/company/5562018/", "job_3_company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM", "job_4_title": "Audit Staff Accountant", "job_4_description": null, "job_4_location": "Cleveland, Ohio, United States", "job_4_start_year": 2020, "job_4_start_month": 9, "job_4_end_year": 2022, "job_4_end_month": 8, "job_4_company_name": "Marcum LLP", "job_4_company_url": "https://www.linkedin.com/company/21984/", "job_4_company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4", "job_5_title": "Graduate Student", "job_5_description": "Masters of Science in Accountancy Class of 2020", "job_5_location": "South Bend, Indiana Area", "job_5_start_year": 2019, "job_5_start_month": 8, "job_5_end_year": 2020, "job_5_end_month": 5, "job_5_company_name": "University of Notre Dame - Mendoza College of Business", "job_5_company_url": "https://www.linkedin.com/company/15102069/", "job_5_company_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA", "job_6_title": null, "job_6_description": null, "job_6_location": null, "job_6_start_year": null, "job_6_start_month": null, "job_6_end_year": null, "job_6_end_month": null, "job_6_company_name": null, "job_6_company_url": null, "job_6_company_logo": null, "job_7_title": null, "job_7_description": null, "job_7_location": null, "job_7_start_year": null, "job_7_start_month": null, "job_7_end_year": null, "job_7_end_month": null, "job_7_company_name": null, "job_7_company_url": null, "job_7_company_logo": null, "job_8_title": null, "job_8_description": null, "job_8_location": null, "job_8_start_year": null, "job_8_start_month": null, "job_8_end_year": null, "job_8_end_month": null, "job_8_company_name": null, "job_8_company_url": null, "job_8_company_logo": null, "job_9_title": null, "job_9_description": null, "job_9_location": null, "job_9_start_year": null, "job_9_start_month": null, "job_9_end_year": null, "job_9_end_month": null, "job_9_company_name": null, "job_9_company_url": null, "job_9_company_logo": null, "job_10_title": null, "job_10_description": null, "job_10_location": null, "job_10_start_year": null, "job_10_start_month": null, "job_10_end_year": null, "job_10_end_month": null, "job_10_company_name": null, "job_10_company_url": null, "job_10_company_logo": null, "education_1": { "grade": null, "end_year": 2015, "activities": null, "school_urn": "urn:li:fsd_school:3185119", "start_year": 2011, "description": "Varsity Football Team Captain", "school_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHxGZiajzHBHg/company-logo_400_400/company-logo_400_400/0/1631371114746/saint_ignatius_high_school_logo?e=1775692800&v=beta&t=p6mYmQOidWylws1rdca8euxkwEhPAMI-Rp2veaCuCbY", "school_name": "Saint Ignatius High School", "field_of_study": "" }, "education_2": { "grade": null, "end_year": 2020, "activities": null, "school_urn": "urn:li:fsd_school:18367", "start_year": 2019, "description": null, "school_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA", "school_name": "University of Notre Dame - Mendoza College of Business", "field_of_study": "Master of Science - MS, Accounting" }, "education_3": { "grade": null, "end_year": 2019, "activities": null, "school_urn": "urn:li:fsd_school:18771", "start_year": 2015, "description": "Minors: Finance and Sport Management", "school_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQEJmXnCQ8bRCQ/company-logo_400_400/company-logo_400_400/0/1631342299438?e=1775692800&v=beta&t=jfaD9Y6mPPF_b_eV4enhqur75TJyll9xFtWSBrsBfiY", "school_name": "Elon University", "field_of_study": "Bachelor of Science - BS, Accounting" }, "education_4": {}, "education_5": {}, "education_6": {}, "education_7": {}, "education_8": {}, "education_9": {}, "education_10": {}, "interests_companies": [ { "company_id": "8450", "company_url": "https://www.linkedin.com/company/8450/", "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQFV98UAyjaH7g/company-logo_200_200/company-logo_200_200/0/1668198003810/aicpa_logo?e=1775692800&v=beta&t=nzwdgDWFggL9e_IrnzlRQw2a04M9BnaFgYSh99B2dng", "is_following": false, "follower_count": 318176 }, { "company_id": "412132", "company_url": "https://www.linkedin.com/company/412132/", "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHxGZiajzHBHg/company-logo_200_200/company-logo_200_200/0/1631371114746/saint_ignatius_high_school_logo?e=1775692800&v=beta&t=eYfT7qH5mXofSmzMiRRVY34mk7a9FzMgTn5pLJ26n38", "is_following": false, "follower_count": 7776 }, { "company_id": "21984", "company_url": "https://www.linkedin.com/company/21984/", "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_200_200/company-logo_200_200/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=nziUMRa2SmWy96tSFeNpG-pZXegSYPE8DvIpMHPp35s", "is_following": false, "follower_count": 50065 } ], "interests_groups": [ { "group_id": "12068263", "group_url": "https://www.linkedin.com/groups/12068263/", "group_logo": "https://media.licdn.com/dms/image/v2/C4E07AQGGOVB8anAuQQ/group-logo_image-shrink_200x200/group-logo_image-shrink_200x200/0/1631001642624?e=1774551600&v=beta&t=wpXl75yxrLXA8drFPHyA81pPgEooE3KGSfxo7Mlkj9U", "group_name": "Elon University's Beta Alpha Psi Chapter" }, { "group_id": "61715", "group_url": "https://www.linkedin.com/groups/61715/", "group_logo": "https://media.licdn.com/dms/image/v2/C4D07AQGRy12-ZPhupw/group-logo_image-shrink_200x200/group-logo_image-shrink_200x200/0/1631357469421?e=1774551600&v=beta&t=PN4CDsrFH7G43QPlxO9A3mVHcJ2lM9BTDK8f-V2Q5UE", "group_name": "Ignatius Men Forever - Saint Ignatius High School, Cleveland" } ], "featured_1": { "text": "I'm thrilled to be joining the executive team at Cassidy Advertising & Consulting LLC alongside Laura Berena and Hailey Cassidy. After 5+ years of helping middle-market companies with strategic financial services, I'm looking forward to bringing that experience into a new industry.", "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7379139520778321921?updateEntityUrn=urn%3Ali%3Afs_feedUpdate%3A%28V2%2Curn%3Ali%3Aactivity%3A7379139520778321921%29", "post_urn": "urn:li:activity:7379139520778321921", "num_likes": 157, "num_comments": 27 }, "featured_2": {}, "featured_3": {}, "featured_4": {}, "featured_5": {}, "jobs": [ { "title": "Vice President of Business Strategy", "description": null, "location": null, "start_year": 2025, "start_month": 9, "end_year": null, "end_month": null, "company_name": "Cassidy Advertising & Consulting LLC", "company_url": "https://www.linkedin.com/company/1620351/", "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQGNJvt99hfofA/company-logo_400_400/company-logo_400_400/0/1630579191372/cassidy_advertising__consulting_llc_logo?e=1775692800&v=beta&t=KDDsoQaD9Swq9jcjc27uPPZCez_CmDuWLMlhr5yuvSc" }, { "title": "Investment Banking Associate", "description": null, "location": null, "start_year": 2024, "start_month": 1, "end_year": 2025, "end_month": 8, "company_name": "MelCap Partners, LLC", "company_url": "https://www.linkedin.com/company/5562018/", "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM" }, { "title": "Investment Banking Analyst", "description": null, "location": null, "start_year": 2022, "start_month": 8, "end_year": 2023, "end_month": 12, "company_name": "MelCap Partners", "company_url": "https://www.linkedin.com/company/5562018/", "company_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHNzoXUJzRBmA/company-logo_400_400/company-logo_400_400/0/1631334371809?e=1775692800&v=beta&t=-Rj5v_dklXsykly2yPwy7xKK8j07MXRpqiiQeYzSLUM" }, { "title": "Audit Staff Accountant", "description": null, "location": "Cleveland, Ohio, United States", "start_year": 2020, "start_month": 9, "end_year": 2022, "end_month": 8, "company_name": "Marcum LLP", "company_url": "https://www.linkedin.com/company/21984/", "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQHTKbL7_5S_kw/company-logo_400_400/company-logo_400_400/0/1730466042261/marcum_llp_logo?e=1775692800&v=beta&t=Uszcw8JZwdF_F8rdgJpYEMGhq64Pa5bih2ARS15bTO4" }, { "title": "Graduate Student", "description": "Masters of Science in Accountancy Class of 2020", "location": "South Bend, Indiana Area", "start_year": 2019, "start_month": 8, "end_year": 2020, "end_month": 5, "company_name": "University of Notre Dame - Mendoza College of Business", "company_url": "https://www.linkedin.com/company/15102069/", "company_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA" } ], "educations": [ { "school_name": "Saint Ignatius High School", "field_of_study": "", "start_year": 2011, "end_year": 2015, "activities": null, "grade": null, "school_urn": "urn:li:fsd_school:3185119", "school_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQHxGZiajzHBHg/company-logo_400_400/company-logo_400_400/0/1631371114746/saint_ignatius_high_school_logo?e=1775692800&v=beta&t=p6mYmQOidWylws1rdca8euxkwEhPAMI-Rp2veaCuCbY" }, { "school_name": "University of Notre Dame - Mendoza College of Business", "field_of_study": "Master of Science - MS, Accounting", "start_year": 2019, "end_year": 2020, "activities": null, "grade": null, "school_urn": "urn:li:fsd_school:18367", "school_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQGU6YLdAy1dTw/company-logo_400_400/company-logo_400_400/0/1630544558231/university_of_notre_dame___mendoza_college_of_business_logo?e=1775692800&v=beta&t=QQRvJBsKyL5p8rcdKApPyrMRHhgcrDivWuA1QsGvpJA" }, { "school_name": "Elon University", "field_of_study": "Bachelor of Science - BS, Accounting", "start_year": 2015, "end_year": 2019, "activities": null, "grade": null, "school_urn": "urn:li:fsd_school:18771", "school_logo": "https://media.licdn.com/dms/image/v2/C4E0BAQEJmXnCQ8bRCQ/company-logo_400_400/company-logo_400_400/0/1631342299438?e=1775692800&v=beta&t=jfaD9Y6mPPF_b_eV4enhqur75TJyll9xFtWSBrsBfiY" } ], "functions": null, "scraping_time": "2025-07-01T12:00:00Z", "native_id": 88751 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-profile-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the LinkedIn Profile Scraper settings including email enrichment Configure your LinkedIn Profile Scraper squid settings. The main configurable option is email enrichment, which uses lobstr.io's enrichment service to find email addresses for the profiles you scrape. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **email\_enrichment** | boolean | true | Enable email enrichment to find email addresses for profiles (9 credits per profile where an email is found) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Email Enrichment When email enrichment is enabled, lobstr.io will attempt to find the email address associated with each LinkedIn profile. **Pricing:** 9 credits per profile enriched. No email found = 0 credits charged. The enrichment service returns: * `email`: The discovered email address (if found) * `email_status`: Validation status of the email (valid, invalid, catch-all, etc.) Email enrichment is enabled by default. Disable it before running if you don't need email data to avoid unexpected credit usage. If you don't need email addresses, disable enrichment to reduce costs: set `email_enrichment` to `false`. **Backward compatibility:** The old function name `email` is still accepted but deprecated. Migrate to `email_enrichment`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "LinkedIn Profile Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "email_enrichment": true } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "LinkedIn Profile Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "email_enrichment": True # 9 credits per profile with email found } } ) data = response.json() print(f"Settings updated: {data['name']}") print(f"Email enrichment: {data['params']['email_enrichment']}") ``` ## Response ```json 201 theme={null} { "name": "LinkedIn Profile Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "email_enrichment": true } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/linkedin-search-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your LinkedIn Search Scraper squid Add search URLs to your **LinkedIn Search Scraper** squid. Crawler ID: `0424cc372bc39cd81341b4a800203525` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields A LinkedIn search results URL: people (`https://www.linkedin.com/search/results/people/?keywords=...`), companies (`.../search/results/companies/?keywords=...`) or posts (`.../search/results/content/?keywords=...`). Filters already present in the pasted URL are kept and applied. LinkedIn caps every search at about 1,000 results — use several searches to slice a bigger query. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.linkedin.com/search/results/people/?keywords=software%20engineer"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.linkedin.com/search/results/people/?keywords=software%20engineer"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.linkedin.com/search/results/people/?keywords=software%20engineer"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/linkedin-search-scraper/credit-cost Credit cost for the LinkedIn Search Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export LinkedIn Search Results | 1 | 1 credit per row (person, company or post). | | Profile Details | 1 | 1 extra credit per profile when `profile_details` is enabled on a people search. | | Company Details | 1 | 1 extra credit per company when `company_details` is enabled on a company search. | | Post Engagement | 1 | 1 extra credit per post when `post_engagement` is enabled on a post search. | LinkedIn caps every search at about 1,000 results. Use filters or several searches to slice a bigger query. # Get Results Source: https://docs.lobstr.io/examples/linkedin-search-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from LinkedIn Search Scraper Retrieve scraped data from your **LinkedIn Search Scraper** runs. Three row types share the same table, one per search: `person`, `company`, `post`. Fields marked "people rows", "company rows" or "post rows" are left empty on the other types. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Common Type of row: `person`, `company` or `post`, following the LinkedIn search that was given as input. Stable LinkedIn id of the row, prefixed by its type so people, companies and posts never collide: `person:{member id or public identifier}`, `company:{company id or universal name}`, `post:{activity id}`. The LinkedIn search URL that was given as task input and produced this row. Keywords actually sent to LinkedIn for this search. Location as displayed on the search card: member location for people rows, headquarters city for company rows. Whether LinkedIn displays the verified badge on the person or the company. Follower count exactly as written on the search card, free text (e.g. `35K followers`). Filled on company rows, and on people rows where LinkedIn shows the social proof line (roughly a quarter of them, rounded). ### People rows LinkedIn internal member id of the profile. Public profile slug used in the profile URL. Direct URL to the LinkedIn profile. Full name of the person as displayed by LinkedIn. First name, split from the full name on the first space. Last name, split from the full name on the first space. Profile headline, free text as written by the member. URL of the profile picture, empty when the member has none. Connection degree between the connected LinkedIn account and the person (`1st`, `2nd`, `3rd+`). Whether LinkedIn displays the premium badge on the person. Whether LinkedIn shows the Open To Work badge for this person. Read for free from every people search row; the Profile Details add-on can also confirm it from the profile page. About section of the profile. Filled by the Profile Details add-on. Current job title and company. Filled by the Profile Details add-on. Whether the profile is in LinkedIn creator mode. Filled by the Profile Details add-on. Cover photo of the profile. Filled by the Profile Details add-on. Work experience entries. Filled by the Profile Details add-on. Education entries. Filled by the Profile Details add-on. Skills listed on the profile. Filled by the Profile Details add-on. ### Company rows Numeric LinkedIn id of the company. Slug of the company LinkedIn page. URL of the company LinkedIn page. Name of the company as displayed by LinkedIn. URL of the company logo. Industry line shown on the company search card, and the company page industry when the Company Details add-on is on. Employee count exactly as written on the company search card, free text (e.g. `10,001+ employees`). Short description shown on the company search card. Company website. Filled by the Company Details add-on. Company tagline. Filled by the Company Details add-on. Full About text of the company page. Filled by the Company Details add-on. Year the company was founded. Filled by the Company Details add-on. Number of employees LinkedIn associates with the company page. Filled by the Company Details add-on. Number of followers, as an integer. Filled by the Company Details add-on for companies, and on a people row only when the search card shows an exact, unrounded number. Company size range as written by LinkedIn (e.g. `5,001-10,000 employees`). Filled by the Company Details add-on. Company type (`Privately Held`, `Public Company`...). Filled by the Company Details add-on. Headquarters as written on the company page. Filled by the Company Details add-on. Headquarters street address. Filled by the Company Details add-on. Headquarters city. Filled by the Company Details add-on. Headquarters region or state. Filled by the Company Details add-on. Headquarters postal code. Filled by the Company Details add-on. Headquarters country. Filled by the Company Details add-on. Phone number published on the company page. Filled by the Company Details add-on. Cover image of the company page. Filled by the Company Details add-on. Offices listed on the company page. Filled by the Company Details add-on. Specialties listed on the company page. Filled by the Company Details add-on. Similar company pages suggested by LinkedIn. Filled by the Company Details add-on. Showcase pages of the company. Filled by the Company Details add-on. Affiliated pages of the company. Filled by the Company Details add-on. Products listed on the company page. Filled by the Company Details add-on. ### Post rows LinkedIn activity id of the post. Permalink of the post. Pretty share URL of the post, as used by the LinkedIn share button. Full text of the post. Publication date and time of the post in UTC, decoded from its LinkedIn activity id. Name of the post author, person or company. Public slug of the post author. LinkedIn URL of the post author. Headline of the post author as shown above the post. Profile picture of the post author. Whether the post author is a `person` or a `company`. Images attached to the post. Number of reposts of the post. Read from the post card when greater than zero, refreshed by the Post Engagement add-on. Number of reactions on the post. Filled by the Post Engagement add-on. Number of comments on the post. Filled by the Post Engagement add-on. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"record_type": "person", "record_id": "person:ACoAACrQ6T4BqCXCOj_ofEXvV9FS46fRs4o2I6o", "profile_url": "https://www.linkedin.com/in/nada-adel-mohamady", "full_name": "Nada Adel", "headline": "Software Engineer @ Microsoft", "location": "Egypt", "connection_degree": "3rd+", "search_keywords": "software engineer"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/linkedin-search-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure LinkedIn Search Scraper settings Configure your **LinkedIn Search Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | keywords | string | — | Free-text search keywords. Overrides the keywords of the pasted URL when set. Works on people, company and post searches. | | first\_name | string | — | People search only. Keeps only profiles whose first name matches. | | last\_name | string | — | People search only. Keeps only profiles whose last name matches. | | title | string | — | People search only. Free-text job title filter. LinkedIn matches it against the current title. | | company | string | — | People search only. Free-text company filter. For an exact company page use `current_company_url` instead — if both are filled, `current_company_url` wins. | | current\_company\_url | string | — | People search only. LinkedIn company page URL or slug. Resolved to LinkedIn's company id; keeps only people currently working there. Costs one extra request per task. | | school | string | — | People search only. Free-text school filter. | | network | string | — | People search only. Connection degrees to keep, from `1st`, `2nd`, `3rd+`. Comma separated for several (e.g. `1st,2nd`). | | profile\_language | string | — | People search only. Two-letter profile language codes, comma separated (e.g. `fr` or `en,fr`). | | location | string | — | A place name (e.g. `France`, `Paris`, or `Paris Texas` to pick one city among namesakes). LinkedIn's numeric geo id still works (e.g. `103644278` for the United States). Comma separated for several. Applies to people (member location) and companies (headquarters location). | | industry | string | — | Company search only. An industry name as LinkedIn lists it (e.g. `Software Development`, `Hospitals and Health Care`). LinkedIn's numeric industry id still works. Comma separated for several. | | max\_results | integer | 1000 | Maximum number of rows to collect per search URL. LinkedIn never returns more than about 1,000 results for one search, whatever this is set to. | | max\_unique\_results\_per\_run | integer | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | | profile\_details | boolean | false | People search only. Opens each profile once to add the About text, current position, full experience, education, skills, open-to-work and creator flags and the cover photo. Costs 1 extra credit per profile. | | company\_details | boolean | false | Company search only. Opens each company page once to add the website, description, tagline, founding year, employee and follower counts, size, type, headquarters and offices, specialties, cover image, similar/showcase/affiliated pages, products and phone. Costs 1 extra credit per company. | | post\_engagement | boolean | false | Post search only. Opens each post once to add its like, comment and repost counts. Costs 1 extra credit per post. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "CEO", "location": "United States", "network": "1st,2nd", "max_results": 500, "profile_details": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "title": "CEO", "location": "United States", "network": "1st,2nd", "max_results": 500, "profile_details": True, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"title": "CEO", "location": "United States", "network": "1st,2nd", "max_results": 500, "profile_details": true}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/naukri-jobs-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Naukri Jobs Scraper squid Add URLs or inputs to your **Naukri Jobs Scraper** squid. Crawler ID: `28ca7564a332a081a1dabda552d5c35b` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Naukri job search URL or a link to a single job posting. Example: `https://www.naukri.com/python-developer-jobs` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "28ca7564a332a081a1dabda552d5c35b", "tasks": [ {"url": "https://www.naukri.com/python-developer-jobs"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "28ca7564a332a081a1dabda552d5c35b", "tasks": [ {"url": "https://www.naukri.com/python-developer-jobs"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.naukri.com/python-developer-jobs"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/naukri-jobs-scraper/credit-cost Credit cost for the Naukri Jobs Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Jobs | 1 | 1 credit per job posting. | | Full Job Details | 1 | 1 extra credit per job posting when the add-on is enabled. Off by default. | # Get Results Source: https://docs.lobstr.io/examples/naukri-jobs-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Naukri Jobs Scraper Retrieve scraped data from your **Naukri Jobs Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Naukri's unique identifier for the job posting. Example: `19999911` Job title as published by the employer. Example: `Senior Python Developer` Direct link to the job posting on Naukri. Example: `https://www.naukri.com/job-listings-senior-python-developer-infosys-bangalore-3-to-6-years-140926500456` Name of the hiring company. Example: `Infosys` Naukri's internal identifier for the hiring company. Example: `3456` Link to the company's job page on Naukri. Example: `https://www.naukri.com/infosys-jobs` URL of the company logo. Example: `https://static.naukimg.com/s/4/100/i/infosys.png` Naukri group identifier for multi-branch employers. Example: `100` Job location(s), comma separated. Example: `Bangalore, Hyderabad` Required experience as displayed on Naukri. Example: `3 to 6 Yrs` Minimum years of experience required. Example: `3` Maximum years of experience required. Example: `6` Salary as displayed on Naukri (often 'Not disclosed'). Example: `8-14 Lacs PA` Minimum yearly salary. Example: `800000` Maximum yearly salary. Example: `1400000` Currency of the salary figures. Example: `INR` Minimum monthly salary. Example: `66667` Maximum monthly salary. Example: `116667` Share of the package that is variable pay, in percent. Example: `15.0` True when the employer chose to hide the salary. Example: `false` Where the structured salary comes from. Example: `EMPLOYER_PROVIDED` Skills tagged on the posting, comma separated. Example: `Python, Django, REST API` Job description as plain text. Job description with original HTML formatting. Date and time the job was posted, in UTC. Example: `2026-09-14T06:00:00Z` How long ago the job was posted, as displayed on Naukri. Example: `1 Day Ago` Number of positions to fill. Example: `5` True when the job is a walk-in interview. Example: `false` Type tag shown on the listing. Example: `Full Time, Permanent` True when the posting comes from a recruitment consultancy. Example: `false` End client the consultancy is hiring for. Example: `Acme Corp` External application link. Example: `https://www.infosys.com/careers/apply/19999911` True when applying redirects to the company's own site. Example: `true` Naukri role-category identifier. Example: `7` Company rating on AmbitionBox, out of 5. Example: `3.9` Number of AmbitionBox employee reviews. Example: `28461` Link to the company's AmbitionBox reviews. Example: `https://www.ambitionbox.com/reviews/infosys-reviews` True when Naukri flags the employer as a top company. Example: `true` True when the posting is exclusive to Naukri. Example: `false` Diversity preference stated on the posting. Example: `Women-friendly workplace` Branding tags attached to the posting, comma separated. Example: `Work From Home, Flexi Working` Walk-in venue address. First day of the walk-in. Last day of the walk-in. Daily walk-in timing. Total jobs Naukri reports for this search. Example: `4328` ### Detail Fields The following fields require `job_details: true` in settings. Number of candidates who already applied. Example: `342` Number of times the posting was viewed. Example: `5120` Employment type, e.g. Full Time, Permanent. Example: `Full Time, Permanent` Work arrangement: Work from office, Hybrid or Remote. Example: `Hybrid` Standardised job role. Example: `Software Developer` Role category label. Example: `Engineering - Software & QA` Department / functional area. Example: `Engineering - Software & QA` Industry of the hiring company. Example: `IT Services & Consulting` Accepted undergraduate degrees. Example: `B.Tech/B.E. in Any Specialization` Accepted postgraduate degrees. Example: `MCA in Any Specialization` Skills Naukri marks as preferred. Example: `FastAPI, PostgreSQL` Other skills listed on the posting. Example: `Docker, Kubernetes` Naukri's own highlights of the posting. Employer's internal reference code. Example: `INF-PY-BLR-2026` True when published on a company microsite. Example: `false` Company website. Example: `https://www.infosys.com` Company address. Example: `Electronics City, Bangalore, Karnataka 560100` About the company. Tags Naukri displays next to the company. Example: `MNC, IT Product` Company rating on the branded job page. Example: `3.9` Number of Naukri users following the company. Example: `182340` Structured list of job locations with Naukri links. Banner image of the employer's branded page. Example: `https://static.naukimg.com/s/4/100/i/infosys-banner.jpg` Recent AmbitionBox employee reviews. AmbitionBox salary benchmark for this job profile. AmbitionBox benefits reported for the company. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=28ca7564a332a081a1dabda552d5c35b" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "28ca7564a332a081a1dabda552d5c35b", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"job_id": "19999911", "title": "Senior Python Developer", "company_name": "Infosys", "location": "Bangalore, Hyderabad", "experience_text": "3 to 6 Yrs", "salary_text": "8-14 Lacs PA", "key_skills": "Python, Django, REST API", "posted_at": "2026-09-14T06:00:00Z"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/naukri-jobs-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Naukri Jobs Scraper settings Configure your **Naukri Jobs Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | keyword | string | — | Job title, skill or company to search for (used when no task URL) | | location | string | — | City or region to search in, e.g. 'bangalore' | | experience | string | Any | Years of experience filter. '0' means fresher | | salary\_range | string | Any | Yearly package band filter | | job\_type | string | Any | Company Jobs or Recruiter Jobs | | work\_mode | string | Any | Work from office, Hybrid, or Remote | | date\_posted | string | Any time | Only return jobs posted within this window | | sort\_by | string | Relevance | Relevance or Date posted | | max\_results | integer | 1000 | Max jobs per search | | max\_unique\_results\_per\_run | integer | — | Max unique results across all tasks in the run | | fetch\_since | string | — | Only collect jobs posted after this threshold | | fetch\_since\_timezone | string | — | Timezone for fetch\_since (e.g. Asia/Kolkata) | | job\_details | boolean | false | Open each job posting to collect full description, applicant and view counts, education requirements | Setting `job_details: true` enables additional detail fields in results. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/28ca7564a332a081a1dabda552d5c35b \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "keyword": "python developer", "location": "bangalore", "experience": "3", "work_mode": "Hybrid", "job_details": true, "max_results": 1000 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/28ca7564a332a081a1dabda552d5c35b", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "keyword": "python developer", "location": "bangalore", "experience": "3", "work_mode": "Hybrid", "job_details": True, "max_results": 1000, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"keyword": "python developer", "location": "bangalore", "experience": "3", "work_mode": "Hybrid", "job_details": true, "max_results": 1000}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/pages-jaunes-iter-companies/add-tasks POST https://api.lobstr.io/v1/tasks Add Pages Jaunes search URLs as tasks for scraping French business directory listings Add Pages Jaunes (French Yellow Pages) search URLs to your squid for scraping business directory listings. The scraper extracts company information including contact details, addresses, business registration numbers (SIRET/SIREN), and social media profiles from France's largest business directory. Crawler ID: `cd3e6b39d78365cd9d0ffbe1c7f5e5bd` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Task Format Each task should contain a URL from a Pages Jaunes search results page. Search for businesses by category and location on the website, then use those search URLs as tasks. ## Supported URL Formats The scraper supports Pages Jaunes search URLs: Pages Jaunes URLs use department codes (e.g., 'paris-75' for Paris). Apply location filters on the website to get properly formatted URLs. Search by specific business categories (boulanger, plombier, restaurant) to get targeted results for your industry research. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.pagesjaunes.fr/annuaire/paris-75/boulanger" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Pages Jaunes search URLs as tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.pagesjaunes.fr/annuaire/paris-75/boulanger"}, {"url": "https://www.pagesjaunes.fr/annuaire/lyon-69/plombier"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") for task in data["tasks"]: print(f" Task ID: {task['id']}") print(f" URL: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.pagesjaunes.fr/annuaire/paris-75/boulanger" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/pages-jaunes-iter-companies/credit-cost Credit cost for the Pages Jaunes Companies Search Export | Function | Cost (credits) | Notes | | - | - | - | | Export Companies | 1 | 1 credit per business. | | Collect Additional Details | 1 | 1 credit per business. | | Collect Emails from Website | 1 | 1 credit per business if any email address is found. No email found = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/pages-jaunes-iter-companies/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Pages Jaunes Companies Search Export Retrieve scraped data from your **Pages Jaunes Companies Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the business on PagesJaunes. Example: `50819340` Business name as listed on PagesJaunes. Example: `Story Vannes` Direct URL to the business listing on PagesJaunes. Example: `https://www.pagesjaunes.fr/pros/50819340#zoneHoraires` Average customer rating of the business on PagesJaunes. Example: `4.7` Total number of customer reviews on PagesJaunes. Example: `282` Full formatted address of the business. Example: `Zac De Luscanen 9 avenue Louis de Cadoudal 56880 Ploeren` Street address without postal code and city. Example: `Zac De Luscanen 9 avenue Louis de Cadoudal` Postal code of the business location. Example: `56880` City where the business is located. Example: `Ploeren` Business description or tagline as shown on PagesJaunes. Example: `Avez-vous besoin d'un magasin pour meubler et décorer votre maison ? Notre magasin vous propose les dernières tendances de l'ameublement et de la décoration, des exclusivités innovantes et colorées. Vous trouverez un large choix de meubles pour salon, mobilier design, literie, relaxation et chambre. Nous fabriquons et installons également des dressings.` Tags or keywords associated with the business on PagesJaunes. Example: `vitrine, livraison sur toute la France, meuble de salon, livraison à domicile, dressing, montage à domicile, canapé cuir, literie` URL of the business's main image on PagesJaunes. Example: `https://www.pagesjaunes.fr/media/newdam/preset-thumbnail-logo-desktop/be/9e/30/00/00/90/d7/46/a6/d3/6994be9e30000090d746a6d3/6994be9e30000090d746a6d4.jpg` Primary phone number of the business. Example: `02 97 63 87 80` French company SIRET number (14-digit unique identifier). Example: `48489335900014` French NAF/APE activity code identifying the business sector. Example: `4759A` Size category of the business location. Example: `3 à 5 salariés` Type or format of the business (e.g. chain store, independent). Example: `Siège` French company SIREN number (9-digit identifier). Example: `484893359` Main activity or trade of the business. Example: `magasins de meubles` Location of the company headquarters Date the company was founded. Example: `2005-10-31T23:00:00+00:00` Company size by number of employees (e.g. 1–10, 50–200). Example: `3 à 5 salariés` Business website URL. Example: `https://www.story.fr/magasins/meuble-vannes-story/` Facebook page URL of the business. Example: `https://www.facebook.com/story.francereseau` Instagram profile URL of the business. Example: `https://www.instagram.com/storyvannes/` Email address of the business. Example: `story.vannes@story.fr` Secondary or alternative phone number of the business. Example: `0297638780` Input search URL the listing was discovered from Legal business name as registered (raison sociale) French legal form code of the company (e.g. `SAS`, `SARL`, `EI`) Comma-separated list of all activities the business is registered for Comma-separated list of alternative trade names registered for the business Total number of establishments registered under the same SIREN Listing tier on Pages Jaunes. Example: `PROFESSIONNEL` Whether the listing is verified on Pages Jaunes Latitude of the business location Longitude of the business location JSON-encoded weekly opening hours, keyed by day in French. Example: `{"Lundi": "09:00-18:00", "Mardi": "09:00-18:00"}` Comma-separated list of all business image URLs Comma-separated list of all external website and social URLs of the business Comma-separated list of accepted payment methods. Example: `Carte bancaire, Chèque, Espèces` Comma-separated list of services offered by the business Comma-separated list of products sold by the business Comma-separated list of brands carried by the business Whether the business accepts quote requests via Pages Jaunes JSON-encoded list of the most recent customer reviews (up to 20) ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 21375, "object": "result", "squid": "b028468237e0aa1f0ef441023b91a729", "run": "de3f1917f27c05d6f209b5d86447e4c6", "item_id": "50819340", "title": "Story Vannes", "url": "https://www.pagesjaunes.fr/pros/50819340#zoneHoraires", "score": 4.7, "ratings": 282, "full_address": "Zac De Luscanen 9 avenue Louis de Cadoudal 56880 Ploeren", "street_address": "Zac De Luscanen 9 avenue Louis de Cadoudal", "zip_code": "56880", "city": "Ploeren", "description": "Avez-vous besoin d'un magasin pour meubler et décorer votre maison ? Notre magasin vous propose les dernières tendances de l'ameublement et de la décoration, des exclusivités innovantes et colorées. Vous trouverez un large choix de meubles pour salon, mobilier design, literie, relaxation et chambre. Nous fabriquons et installons également des dressings.", "tags": "vitrine, livraison sur toute la France, meuble de salon, livraison à domicile, dressing, montage à domicile, canapé cuir, literie", "image_url": "https://www.pagesjaunes.fr/media/newdam/preset-thumbnail-logo-desktop/be/9e/30/00/00/90/d7/46/a6/d3/6994be9e30000090d746a6d3/6994be9e30000090d746a6d4.jpg", "phone": "02 97 63 87 80", "siret": "48489335900014", "naf_code": "4759A", "shop_size": "3 à 5 salariés", "shop_type": "Siège", "siren": 484893359, "activity": "magasins de meubles", "company_hq": null, "company_creation_date": "2005-10-31T23:00:00+00:00", "company_size": "3 à 5 salariés", "website": "https://www.story.fr/magasins/meuble-vannes-story/", "facebook": "https://www.facebook.com/story.francereseau", "instagram": "https://www.instagram.com/storyvannes/", "email": "story.vannes@story.fr", "additional_phone": "0297638780", "ref": "https://www.pagesjaunes.fr/annuaire/paris-75/boulanger", "raison_social": "Atie Bat", "forme_juridique": "5710", "multi_activite": "Plombiers, Entreprises d'électricité générale, Dépannage plomberie, Vitrerie", "autres_denominations": "DENOMINATION ALTERNATIVE 1, DENOMINATION ALTERNATIVE 2", "nombre_etablissements": 0, "listing_type": "PROFESSIONNEL", "is_verified": true, "latitude": 48.856898, "longitude": 2.350843, "opening_hours": "{\"Lundi\": [\"06h00 - 23h00\"], \"Mardi\": [\"06h00 - 23h00\"]}", "images": "https://www.pagesjaunes.fr/media/img1.jpg, https://www.pagesjaunes.fr/media/img2.jpg", "external_links": "https://www.atie-bat.fr/contact", "payment_methods": "CB, Espèces, Chèque, Virement", "prestations": "réparation d'émail de sanitaire, réparation de chauffe-eau", "products": "wc, robinetterie, cabine de douche", "brands": "GROHE, Ideal Standard, Vaillant", "accepts_quote_requests": false, "reviews": "[{\"author\": \"Jean D.\", \"rating\": 5, \"date\": \"2025-04-10\", \"text\": \"Excellent service.\"}]", "functions": null, "native_id": 21375 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/pages-jaunes-iter-companies/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Pages Jaunes Companies Search Export scraper parameters and enrichment options Configure your Pages Jaunes Companies Search Export squid settings to control pagination and enable detailed company information enrichment. Enable functions to collect email addresses, social media profiles, and official business registration numbers. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | unlimited | Maximum number of search result pages to scrape | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **functions.collect\_contacts** | boolean | true | Visit each company's detail page to collect enriched data: opening hours, images, social links, payment methods, services, reviews and more (1 credit per company) | | **functions.results\_details** | boolean | true | Collect official business registration details: SIRET, SIREN, NAF codes, legal form, and other registry data (1 credit per company) | ## General Settings Standard squid settings that apply to all scrapers: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Enabling `functions.collect_contacts` or `functions.results_details` increases run time due to additional HTTP requests per listing. SIRET numbers are valuable for B2B verification and can be used to look up official company information in French government databases. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Pages Jaunes Companies Search Export (2)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "collect_contacts": true, "results_details": true }, "max_pages": 3 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Configure scraper with enrichment functions response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Pages Jaunes Companies Search Export (2)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "functions": { "collect_contacts": True, # Enriched detail page data "results_details": True # Official registry data (SIRET, SIREN, NAF) }, "max_pages": 3 } } ) data = response.json() print(f"Squid updated: {data['name']}") print(f"Max pages: {data['params']['max_pages']}") print(f"Collect additional details: {data['params']['functions']['collect_additional_details']}") print(f"Collect emails from website: {data['params']['functions']['collect_emails_from_website']}") ``` ## Response ```json 201 theme={null} { "name": "Pages Jaunes Companies Search Export (2)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "collect_contacts": true, "results_details": true }, "max_pages": 3 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/pap-iter-apartments/add-tasks POST https://api.lobstr.io/v1/tasks Add PAP.fr search URLs as tasks for scraping French real estate listings Add PAP.fr (Particulier a Particulier) search URLs to your squid for scraping French private real estate listings. PAP is a French platform for direct owner-to-buyer property transactions without agents. The scraper extracts property details including price, location, energy ratings, and contact information. Crawler ID: `9980d62d6a23161a08d1134c0cabdf5c` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Task Format Each task should contain a URL from a PAP.fr search results page. You can search for properties by location, type, and filters on PAP, then use those search URLs as tasks. ## Supported URL Formats The scraper supports PAP.fr search URLs from various property categories: PAP.fr is for private sales (particulier a particulier), meaning you deal directly with owners rather than agencies. This can mean more negotiation flexibility. PAP URLs use department codes (e.g., 'ain-01' for Ain department). Apply location filters on the website to get the correct URL format. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.pap.fr/annonce/vente-immobiliere-ain-01-g364" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add PAP.fr search URLs as tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.pap.fr/annonce/vente-immobiliere-ain-01-g364"}, {"url": "https://www.pap.fr/annonce/vente-immobiliere-paris-75-g439"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") for task in data["tasks"]: print(f" Task ID: {task['id']}") print(f" URL: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.pap.fr/annonce/vente-immobiliere-ain-01-g364" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/pap-iter-apartments/credit-cost Credit cost for the PAP Search Export 1 credit per listing. # Get Results Source: https://docs.lobstr.io/examples/pap-iter-apartments/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from PAP Search Export Retrieve scraped data from your **PAP Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the listing on PAP (Particulier à Particulier). Example: `460201580` Direct URL to the listing on PAP. Example: `https://www.pap.fr/annonces/maison-bourg-en-bresse-01000-r460201580` Title of the property listing on PAP. Example: `Vente maison 122 m² Bourg-En-Bresse (01000)` Breadcrumb navigation path indicating the listing's category and location on PAP Listed price of the property Currency of the listed price PAP reference number for the listing. Example: `G02/1580` Date the listing was published on PAP. Example: `2026-03-20` List of property image URLs from the listing. Example: `https://cdn.pap.fr/photos/pap/84/e6/84e6846cf2588b1ddd8c4422e93eb447/8-p1.jpg, https://cdn.pap.fr/photos/pap/8e/96/8e96e04a6f71b9d765f776a622bfc7a8/8-p1.jpg, https://cdn.pap.fr/photos/pap/ac/b6/acb6e93116c4f857f08d4110ad95ca99/a-p1.jpg, https://cdn.pap.fr/photos/pap/36/59/36592cba805e27d997e3be34489a9133/3-p1.jpg, https://cdn.pap.fr/photos/pap/e2/ae/e2ae8afbecf9b31e4139ecbb8d578158/e-p1.jpg, https://cdn.pap.fr/photos/pap/9d/b7/9db7715952cd1b323d0246c6d867a84b/9-p1.jpg` Total number of rooms in the property. Example: `5` Number of bedrooms in the property. Example: `3` Living surface area of the property in square metres Neighborhood or locality where the property is located. Example: `Bourg-en-Bresse (01000)` Full description text provided by the seller on PAP. Example: `Maison à vendre dans le quartier des Vennes en face de l'école des Vennes de 100 m² avec un appartement indépendant en dessous de 22 m² indépendant. La maison à 3 chambres de 11 à 13 m² chacune + une cuisine de 13 m² avec cuisine incorporée une grande salle a manger salon avec beau parquet de 41 m² avec accès sur balcon de 7 m² avec volet roulant électrique. Salle de bain de 5 m² refaites à neuf avec douche italienne de juillet 2025 aménagée qui peut convenir pour personne âgée... / wc séparé. Grande cave sous presque toute la maison avec plusieurs pièces qui peuvent très bien être aménagées comme pièces de vie même si la hauteur ne permet pas que ces dernières soient considérées comme des pièces de vie mais aucun souci pour les aménager comme tel si besoin, elles sont pourvue de plusieurs placards de rangements...` Contact phone number of the seller. Example: `06 12 02 24 61` Energy performance class of the property (DPE rating, e.g. A to G). Example: `E` Greenhouse gas emissions class of the property (GES rating, e.g. A to G). Example: `E` Latitude coordinate of the property. Example: `46.189715` Longitude coordinate of the property. Example: `5.228885` Price per square metre as computed by PAP. Example: `2459` Transaction type for the listing. Example: `vente`, `location` Property type as a lowercase slug. Example: `appartement`, `maison` Property type in display form as shown on PAP. Example: `Appartement` Full sentence describing the energy performance (DPE) class. Example: `Logement très peu performant` Full sentence describing the greenhouse gas emissions (GES) class. Example: `Émissions très élevées` Nearby public transit stations and their lines. URL of the listing's virtual tour, if any. Whether the listing is marked as PAP-exclusive. Whether the owner can be contacted by email (some owners accept phone contact only). Whether PAP independently validated the listing's asking price. Whether the owner's listing shows the "refuses commercial canvassing" flag. Whether the owner offers a WhatsApp video-call viewing option. URL of the listing's YouTube video, if any. ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 27227, "object": "result", "squid": "ef94be05b736ba2a22478b3bd5b48617", "run": "d1cb411736760627050af20746043c69", "internal_id": "460201580", "url": "https://www.pap.fr/annonces/maison-bourg-en-bresse-01000-r460201580", "title": "Vente maison 122 m² Bourg-En-Bresse (01000)", "breadcrumb": null, "price": null, "currency": null, "ref": "G02/1580", "publication_date": "2026-03-20", "image_urls": [ "https://cdn.pap.fr/photos/pap/84/e6/84e6846cf2588b1ddd8c4422e93eb447/8-p1.jpg", "https://cdn.pap.fr/photos/pap/8e/96/8e96e04a6f71b9d765f776a622bfc7a8/8-p1.jpg", "https://cdn.pap.fr/photos/pap/ac/b6/acb6e93116c4f857f08d4110ad95ca99/a-p1.jpg" ], "rooms": 5, "bedrooms": 3, "size": null, "neighborhood": "Bourg-en-Bresse (01000)", "description": "Maison à vendre dans le quartier des Vennes en face de l'école des Vennes de 100 m² avec un appartement indépendant en dessous de 22 m² indépendant. La maison à 3 chambres de 11 à 13 m² chacune + une cuisine de 13 m² avec cuisine incorporée une grande salle a manger salon avec beau parquet de 41 m² avec accès sur balcon de 7 m² avec volet roulant électrique. Salle de bain de 5 m² refaites à neuf avec douche italienne de juillet 2025 aménagée qui peut convenir pour personne âgée... / wc séparé. Grande cave sous presque toute la maison avec plusieurs pièces qui peuvent très bien être aménagées comme pièces de vie même si la hauteur ne permet pas que ces dernières soient considérées comme des pièces de vie mais aucun souci pour les aménager comme tel si besoin, elles sont pourvue de plusieurs placards de rangements...", "phone": "06 12 02 24 61", "energy": "E", "ges": "E", "lat": 46.189715, "lng": 5.228885, "price_per_sqm": 10417, "produit": "vente", "typebien": "appartement", "typebien_label": "Appartement", "energy_description": "Logement avec une consommation annuelle d'énergie comprise entre 251 et 330 kWh/m²/an.", "ges_description": "Logement avec une émission de gaz à effet de serre comprise entre 51 et 70 kgéqCO2/m²/an.", "transports": "Alexandra David-Néel (tram-0, tram-3a); Porte de Vincennes (metro-0, metro-1, tram-0, tram-3b, tram-3a)", "visite_virtuelle": "https://my.matterport.com/show/?m=3RoVyvrsNMq&brand=0", "exclusive": false, "has_email": true, "prix_valide": false, "affiche_demarchage_refuse": true, "appel_video": false, "video": "https://www.youtube.com/watch?v=BHYfsB3y4n8", "functions": null, "native_id": 27227 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/pap-iter-apartments/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the PAP Apartments scraper parameters and options Configure your PAP Apartments squid settings to control the maximum number of results to scrape. Adjust settings based on how many listings you need from each search. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of listings to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **fetch\_since** | string | — | Only keep listings published after this point (based on `publication_date`). Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`) | | **fetch\_since\_timezone** | string | — | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values. | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Start with a lower max\_results value (e.g., 50) to test your search before scaling up to larger extractions. PAP typically has fewer listings than agency-based platforms since it only features private sellers. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "PAP Apartments (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 200 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "PAP Apartments (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 200 } } ) data = response.json() print(f"Squid updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "PAP Apartments (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 200 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/paruvendu-listings-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your ParuVendu Listings Scraper squid Add URLs or inputs to your **ParuVendu Listings Scraper** squid. Each task object must include the required fields below. Crawler ID: `6a564030e814e6de4931637f7fb0c06e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields A paruvendu.fr search URL. Example: `https://www.paruvendu.fr/a/voiture-occasion/bmw/` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.paruvendu.fr/a/voiture-occasion/bmw/" }, { "url": "https://www.paruvendu.fr/a/voiture-occasion/audi/" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_hash, "tasks": [ {"url": "https://www.paruvendu.fr/a/voiture-occasion/bmw/"}, {"url": "https://www.paruvendu.fr/a/voiture-occasion/audi/"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2025-06-24T11:11:30.222467", "is_active": true, "params": { "url": "https://www.paruvendu.fr/a/voiture-occasion/bmw/" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/paruvendu-listings-scraper/credit-cost Credit cost for the ParuVendu Listings Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 1 | 1 credit per listing. | | Get Annonce Details | 4 | 4 credits per listing. | # Get Results Source: https://docs.lobstr.io/examples/paruvendu-listings-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from ParuVendu Listings Scraper Retrieve scraped data from your **ParuVendu Listings Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from. Hash of a specific run (optional). Page number (default: 1). Results per page (default: 50, max: 100). ## Result Fields Direct URL to the listing on paruvendu.fr. Title of the listing. Example: `BMW Série 3 320d 150ch` Top-level category of the listing (e.g. car, real estate). Example: `voiture` Type of listing (e.g. sale, rental). Example: `vente` Sub-category or asset type within the section. Example: `berline` Listed price. Example: `12500` Currency of the price. Example: `EUR` Vehicle manufacturer or brand. Example: `BMW` Vehicle model. Example: `Série 3` Year of manufacture. Example: `2018` Odometer reading in kilometres. Example: `85000` Fuel type (e.g. Diesel, Essence, Électrique). Example: `Diesel` Gearbox type (e.g. Manuelle, Automatique). Example: `Manuelle` City or region of the listing. Example: `Paris` Postal code of the listing location. Example: `75001` Number of rooms (for real estate listings). Surface area in square metres (for real estate listings). URL of the main listing image. Short preview of the listing description. Full description text (available when `get_annonce_details` is enabled). List of features or equipment (available when `get_annonce_details` is enabled). Name of the seller (available when `get_annonce_details` is enabled). URL to the seller's profile page (available when `get_annonce_details` is enabled). Number of active listings by the seller (available when `get_annonce_details` is enabled). Seller phone number (available when `get_annonce_details` is enabled). Unique listing reference number on paruvendu.fr. Date the listing was last published or refreshed. Example: `2026-03-15` ISO 8601 timestamp of the last update. Example: `2026-03-15T10:30:00Z` Energy performance rating (DPE) for real estate listings (A–G). Example: `C` Greenhouse gas emission rating (GES) for real estate listings (A–G). Example: `D` Additional structured info extracted from the listing summary. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=1&page_size=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} params = { "squid": "YOUR_SQUID_HASH", "page": 1, "page_size": 50 } all_results = [] url = f"{BASE_URL}/results" while True: response = requests.get(url, headers=headers, params=params) data = response.json() all_results.extend(data["data"]) print(f"Fetched page {data['page']} of {data['total_pages']}") if data["next"] is None: break url = data["next"] params = {} print(f"\nTotal listings collected: {len(all_results)}") for listing in all_results[:5]: print(f"- {listing.get('title')} — {listing.get('price')} {listing.get('currency')} ({listing.get('location')})") ``` ## Response ```json 200 theme={null} { "total_results": 87, "limit": 50, "page": 1, "total_pages": 2, "result_from": 1, "result_to": 50, "data": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "url": "https://www.paruvendu.fr/a/voiture-occasion/bmw/serie-3/12345678/", "title": "BMW Série 3 320d 150ch BVA", "section": "voiture", "annonce_type": "vente", "asset_type": "berline", "price": 12500, "currency": "EUR", "make": "BMW", "model": "Série 3", "year": 2018, "mileage": 85000, "fuel_type": "Diesel", "gearbox": "Automatique", "location": "Paris", "postal_code": "75001", "picture": "https://img.paruvendu.fr/thumb/12345678_1.jpg", "description_preview": "Véhicule en excellent état, révision faite...", "last_publication_date": "2026-03-15", "reference": "12345678", "scraping_time": "2026-03-20T09:15:00.000Z" } ], "next": "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=2&page_size=50", "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/paruvendu-listings-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure settings for your ParuVendu Listings Scraper squid Update the configuration of your **ParuVendu Listings Scraper** squid. Pass crawler-specific settings inside the `params` object. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Crawler-specific settings. See fields below. ## Settings Fields Maximum number of listings to collect per task. Leave empty for unlimited. Maximum number of unique results across all tasks in a run. Leave empty for unlimited. Maximum number of search result pages to crawl per task. Default: `100`, max: `100`. Only collect listings published after this point. Use a date (`YYYY-MM-DD`) or a relative duration (`24h`, `7d`, `2w`). If not provided, no time filtering is applied. **Category support:** publication dates are available on listing pages only for `immobilier`. For other categories (vehicles, services, animaux, etc.) a date is only available on the detail page — enable `get_annonce_details` for `fetch_since` to work with those categories. Some categories (`emploi`, `location-vacances`, `mondebarras`, `moto`, `services`) do not expose a publication date at all and `fetch_since` will have no effect for them. Timezone for interpreting an absolute `fetch_since` date (e.g. `"Europe/Paris"`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `"24h"` or `"7d"`. Use `fetch_since: "7d"` to collect only listings from the last 7 days. Enable `get_annonce_details` if you're scraping non-`immobilier` categories and need date filtering to work. ## Optional Functions Functions are optional add-ons that enable extra data extraction. Each incurs additional credits per row. Fetch additional details by visiting each listing's detail page: full description, features, seller info, and phone number. Default: `false`. Extra cost: `4` credits per listing. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "ParuVendu BMW Listings", "params": { "max_results": 100, "max_pages": 10, "fetch_since": "7d", "fetch_since_timezone": null, "get_annonce_details": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={ "name": "ParuVendu BMW Listings", "params": { "max_results": 100, "max_pages": 10, "fetch_since": "7d", # relative: "24h", "7d", "2w" | absolute: "2026-01-01" "fetch_since_timezone": None, # e.g. "Europe/Paris" — only used with absolute fetch_since "get_annonce_details": False } } ) data = response.json() print(f"Squid updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "id": "YOUR_SQUID_HASH", "name": "ParuVendu BMW Listings", "crawler": { "id": "6a564030e814e6de4931637f7fb0c06e", "name": "ParuVendu Listings Scraper", "slug": "paruvendu-listings-scraper" }, "params": { "max_results": 100, "max_pages": 10, "fetch_since": "7d", "fetch_since_timezone": null, "get_annonce_details": false }, "concurrency": 1, "export_unique_results": true, "to_complete": true, "no_line_breaks": false, "status": "idle", "created_at": "2025-01-20T10:15:00.000000", "updated_at": "2025-01-27T14:35:00.000000" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/pinterest-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Pinterest Scraper squid Add URLs or keywords to your **Pinterest Scraper** squid. Crawler ID: `561d9028e73c59c9911c275b86073726` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields A keyword such as `home office`, or a Pinterest search, board, profile or pin link. Share links from the Pinterest app (`pin.it`) work too. A single word on its own is searched as a keyword, so paste the full link when you mean a profile. Example: `https://www.pinterest.com/search/pins/?q=home%20office` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.pinterest.com/search/pins/?q=home%20office"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.pinterest.com/search/pins/?q=home%20office"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.pinterest.com/search/pins/?q=home%20office"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/pinterest-scraper/credit-cost Credit cost for the Pinterest Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Pins | 1 | 1 credit per pin. | | Full Pin Details | 1 | 1 extra credit per pin when `pin_details` is enabled. Off by default. Included at no extra cost when the task is a single pin link. | # Get Results Source: https://docs.lobstr.io/examples/pinterest-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Pinterest Scraper Retrieve scraped data from your **Pinterest Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Pins Pinterest's unique identifier for the pin. Numeric for most pins, but some pins carry an encoded id such as `e1_AfqPShzqO1C7_LEkrAbtoIWUe2MoGdDTj5vU32Lr9gXn25qs1FpIvg`, so store it as text. Example: `37858453110553201` Direct link to the pin on Pinterest. Example: `https://www.pinterest.com/pin/37858453110553201/` Title of the pin. Frequently empty: most Pinterest pins carry only a description. Example: `Bright Living Room with Windows and Window Sill` Plain-text description (caption) of the pin. Description with Pinterest's own HTML markup (hashtag and mention links). Served on profile inputs, and on any pin when Full Pin Details is on. Alternative text of the pin image. Uses the text written by the pinner when there is one, otherwise the text Pinterest generated automatically. Date and time (UTC) the pin was created. Not served by Pinterest on board inputs unless Full Pin Details is on. Example: `2023-06-07 12:38:53+00:00` True when the pin carries a video. Left blank (not False) on keyword-search rows: that surface only proves videos, it never says a pin has none — turn on Full Pin Details for a definitive answer on those rows. Playable video stream of the pin (HLS playlist, MP4 when Pinterest serves no playlist). Empty on image pins. True when the pin is a paid Pinterest ad. True when the pin was saved from another pin rather than uploaded. Served on board and profile inputs, and on any pin when Full Pin Details is on. Domain the pin links to, or `Uploaded by user` for a direct upload. Example: `potterybarn.com` Outbound link the pin points to. Number of times the underlying image was saved on Pinterest (the "saves" figure shown in the UI). Example: `3920` Number of times this exact pin was re-pinned. A different counter from `save_count`, which aggregates every copy of the image. Number of comments on the pin. Served on profile inputs, and on any pin when Full Pin Details is on. Number of users who favourited the pin. Served on board inputs, and on any pin when Full Pin Details is on. Total number of reactions on the pin. Pinterest currently ships a single reaction type. Dominant colour of the pin image, as computed by Pinterest. Example: `#8e4a2c` Full resolution image of the pin. Width in pixels of the full resolution image. Height in pixels of the full resolution image. Every image size Pinterest serves for the pin, keyed by size label, with url, width and height. Price attached to the pin when it is a product pin. Served on profile inputs, and on any pin when Full Pin Details is on. Currency of `price_value`. Visibility of the pin itself, e.g. `public`. Served on profile inputs, and on any pin when Full Pin Details is on. Pinterest identifier of the account that owns the pin. Handle of the account that owns the pin. Example: `potterybarn` Display name of the account that owns the pin. Example: `Pottery Barn` Link to the profile of the account that owns the pin. Follower count of the account that owns the pin. Pinterest only ships it on some surfaces; filled from the profile header on a profile input. Profile picture of the account that owns the pin. True when the account that owns the pin is a Pinterest verified merchant. Pinterest identifier of the board the pin is saved on. Name of the board the pin is saved on. Example: `Instagram Inspiration` Link to the board the pin is saved on. Visibility of the board, e.g. `public`. Pinterest omits it from the keyword search payload. Topic labels Pinterest attaches to the pin, e.g. `Flex Room Design Ideas`. Free on keyword searches; on board and profile pins Pinterest only serves them with Full Pin Details. Every slide of a carousel pin, in order, with its own image url, width, height, outbound link and video url when the slide is a video. Empty for single-image pins. Free on board and profile pins; keyword searches only carry it with Full Pin Details. ### Full Pin Details Number of times the pin was shared. Only Pinterest's pin page carries it, so it needs Full Pin Details. Interest label Pinterest attaches to the pin, e.g. `Room Decor`. Only Pinterest's pin page carries it, so it needs Full Pin Details. Objects Pinterest detected inside the pin image. Only Pinterest's pin page carries it, so it needs Full Pin Details. Frequently an empty list. ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"pin_id": "37858453110553201", "pin_url": "https://www.pinterest.com/pin/37858453110553201/", "title": "Bright Living Room with Windows and Window Sill", "description": "This deserves another spot on the grid.", "domain": "potterybarn.com", "destination_url": "https://www.potterybarn.com/products/printers-writing-large-desk/", "save_count": 3920, "image_url": "https://i.pinimg.com/originals/c3/df/7f/c3df7f6f591485da278cb5a44aeff0be.jpg", "pinner_username": "potterybarn", "board_name": "Instagram Inspiration"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/pinterest-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Pinterest Scraper settings Configure your **Pinterest Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | video\_only | boolean | false | Only keep pins that come with a playable video. Idea pins are not included. | | pin\_details | boolean | false | Open each pin to add its share, comment and save counts, price, alt text, full description and the topics Pinterest detected. Included at no extra cost when the task is a single pin link. Costs 1 extra credit per pin otherwise. | | max\_results | integer | — | The most pins to collect from each keyword, board or profile. Leave empty to collect everything Pinterest shows. | | max\_unique\_results\_per\_run | integer | — | Maximum number of unique pins retrieved across all tasks in the entire run. Leave empty for unlimited. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "video_only": false, "pin_details": true, "max_results": 100 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "video_only": False, "pin_details": True, "max_results": 100, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"video_only": false, "pin_details": true, "max_results": 100}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/quora-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Quora Scraper squid Add URLs or inputs to your **Quora Scraper** squid. Crawler ID: `7a8473daa49fb96711016aa655384bb3` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Quora question, profile, space, or topic URL. Example: `https://www.quora.com/What-is-the-best-programming-language-to-learn-first` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.quora.com/What-is-the-best-programming-language-to-learn-first"}]}' ``` ```python Python theme={null} import requests headers = {"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"} response = requests.post("https://api.lobstr.io/v1/tasks", headers=headers, json={"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.quora.com/What-is-the-best-programming-language-to-learn-first"}]}) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.quora.com/What-is-the-best-programming-language-to-learn-first"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/quora-scraper/credit-cost Credit cost for the Quora Scraper 1 credit per record (answer, post, profile, or topic). # Get Results Source: https://docs.lobstr.io/examples/quora-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Quora Scraper Retrieve scraped data from your **Quora Scraper** runs. Each row has a `record_type` field indicating what was scraped: `answer`, `profile`, `profile_answer`, `profile_post`, or `topic`. Fields are populated based on the record type. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Row type — answer, profile, profile\_answer, profile\_post, or topic. Example: `answer` Quora opaque base64 node id. Canonical URL of this record. The Quora URL given as task input. Quora numeric question id. Plain-text title of the question. Example: `What is the best programming language to learn first?` Canonical URL of the question. Number of answers Quora reports. Number of followers of the question. URL slug of the question. Topics the question is filed under. Related questions Quora surfaces. Quora numeric answer id. Plain-text body of the answer. Example: `Python is widely considered the best first language due to its clear syntax...` UTC datetime the answer was posted. Number of upvotes. Example: `1842` Number of displayed comments. Number of views. Example: `42301` Number of shares. Quora numeric user id of the author. Display name of the author. Example: `John Doe` URL of the author's Quora profile. Credential displayed under the author's name. True when posted anonymously. True when author is listed as a most-viewed writer for the question's topic. Quora numeric post id (Space/Post rows). Title of the post. Plain-text body of the post. Image URLs embedded in the post. UTC datetime the post was published. Number of views. Number of upvotes. Number of displayed comments. Number of shares. Name of the Quora Space the post was published in. Quora numeric Space id. URL of the scraped profile. Display name on the profile. Plain-text profile description. Top-line credential shown on the profile. Number of followers. Number of public answers. Topic node ids the profile claims expertise in. Quora numeric topic id. Name of the topic. URL of the topic. Number of topic followers. Related topics listed on the topic page. Most-viewed writers leaderboard of the topic. ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"record_type": "answer", "question_title": "What is the best programming language to learn first?", "answer_content": "Python is widely considered the best first language due to its clear syntax...", "author_name": "John Doe", "answer_upvote_count": 1842, "answer_view_count": 42301}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/quora-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Quora Scraper settings Configure your **Quora Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | **url** | string | — | URL of a Quora question, profile, space or topic | | **max\_results** | integer | — | Maximum rows to collect per task | | **max\_unique\_results\_per\_run** | integer | — | Max unique results across all tasks in a run | | **resolve\_most\_viewed\_writers** | boolean | false | Fetch question's topic page to get most-viewed-writer status for each answerer | ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"max_results": 100, "resolve_most_viewed_writers": false}}' ``` ```python Python theme={null} import requests requests.post("https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"}, json={"params": {"max_results": 100, "resolve_most_viewed_writers": false}}) ``` ## Response ```json 201 theme={null} {"params": {"max_results": 100, "resolve_most_viewed_writers": false}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/realtor-iter-listings/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Realtor Listings Scraper squid Add URLs or inputs to your **Realtor Listings Scraper** squid. Each task object must include the required fields below. Crawler ID: `f388a9866f943bc5c29bde8b33587bd3` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields A realtor.com search URL. Example: `https://www.realtor.com/realestateandhomes-search/California/pg-5` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.realtor.com/realestateandhomes-search/California" }, { "url": "https://www.realtor.com/realestateandhomes-search/New-York" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_hash, "tasks": [ {"url": "https://www.realtor.com/realestateandhomes-search/California"}, {"url": "https://www.realtor.com/realestateandhomes-search/New-York"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2025-06-24T11:11:30.222467", "is_active": true, "params": { "url": "https://www.realtor.com/realestateandhomes-search/California" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/realtor-iter-listings/credit-cost Credit cost for the Realtor Property Listings Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 0.5 | 0.5 credits per listing | | Collect Property Details | 0.5 | 0.5 credits per listing | # Get Results Source: https://docs.lobstr.io/examples/realtor-iter-listings/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Realtor Listings Scraper Retrieve scraped data from your **Realtor Listings Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from. Hash of a specific run (optional). Page number (default: 1). Results per page (default: 50, max: 100). ## Result Fields Direct URL to the listing on realtor.com. Example: `https://www.realtor.com/realestateandhomes-detail/123-Main-St_Los-Angeles_CA_90001_M12345-67890` Full formatted address of the property. Example: `123 Main St, Los Angeles, CA 90001` Street address. Example: `123 Main St` City name. Example: `Los Angeles` US state abbreviation. Example: `CA` County name. Example: `Los Angeles County` ZIP code. Example: `90001` Listing status (e.g. for\_sale, sold, pending). Example: `for_sale` Listed price in USD. Example: `750000` Final sold price (if applicable). Example: `740000` Currency of the price. Example: `USD` Number of bedrooms. Example: `3` Number of bathrooms. Example: `2.5` Interior living area in square feet. Example: `1850` Lot size in acres. Example: `0.15` Type of property (e.g. single\_family, condo, townhouse). Example: `single_family` Whether the property is new construction. Example: `false` Whether the property is to be built. Example: `false` Whether the listing is a foreclosure. Example: `false` Whether the listing is under contract/pending. Example: `false` Name of the brokerage listing the property. Example: `Keller Williams Realty` Primary seller or listing agent name. Co-seller or co-listing agent name. Latitude coordinate of the property. Example: `34.052235` Longitude coordinate of the property. Example: `-118.243683` URL of the main listing photo. Date the listing was first published. Example: `2026-03-10` Date the property was listed. Example: `2026-03-10` Date the property was sold (if applicable). Example: `2026-03-28` Date the listing status last changed (e.g. listed → pending). Example: `2026-04-02` Year the property was built. Example: `1998` Monthly HOA fee in USD. Example: `250` Price per square foot. Example: `405` Listing agent's display name. Example: `Jane Smith` Listing agent's phone number. Example: `+13105550142` Listing agent email address. Example: `jane.smith@kw.com` Brokerage office name. Example: `Keller Williams Realty` Brokerage office phone number. Example: `+13105550100` Builder name for new-construction listings. Example: `Pulte Homes` Property sub-type (e.g. `co_op`, `condo`, `townhouse`). Example: `townhouse` Number of garage spaces. Example: `2` Neighborhood name. Example: `Silver Lake` All neighborhood names for the listing (when multiple apply). Example: `["Silver Lake", "Eastside"]` County FIPS code, for joining to census or market data. Example: `06037` Google Street View image URL for the property. Virtual tour / 3D walkthrough URL. Whether the price was recently reduced. Example: `false` Whether the listing is contingent. Example: `false` Whether the listing is marked as coming soon. Example: `false` Whether the listing was added in the last 14 days. Example: `true` Amount of the most recent price reduction in USD. Example: `25000` Scheduled open house dates and times, when available. MLS listing ID. Example: `SR26054321` Realtor.com internal property ID. Example: `M12345-67890` Number of stories in the property. Example: `2` Year the property was last renovated. Example: `2018` ## Detail Fields These fields require `property_details: true`: Full photo gallery (list of image URLs). Requires `property_details`. Total number of photos. Requires `property_details`. Example: `42` Per-photo metadata: AI-generated room tags (e.g. kitchen, bedroom), title and description for each photo. Requires `property_details`. Full listing description text. Requires `property_details`. Price and sale event timeline. Requires `property_details`. Yearly tax, assessment and market valuations. Requires `property_details`. Building permit history with project, type of work, project type, and effective date. Requires `property_details`. Rated nearby schools with grades, ratings and distance. Requires `property_details`. Full spec sheet grouped by category (interior, exterior, HOA, etc.). Requires `property_details`. Structured amenity tags, each with a stable `id` and human-readable `label`. Requires `property_details`. Number of full bathrooms. Requires `property_details`. Example: `2` Number of half bathrooms. Requires `property_details`. Example: `1` Number of three-quarter bathrooms. Requires `property_details`. Example: `0` Total bathroom count. Requires `property_details`. Example: `3` Upper bound of bedroom count for multi-unit listings. Requires `property_details`. Lower bound of bedroom count for multi-unit listings. Requires `property_details`. Upper bound of square footage for multi-unit listings. Requires `property_details`. Lower bound of square footage for multi-unit listings. Requires `property_details`. Garage type (e.g. `attached`, `detached`). Requires `property_details`. Cooling system description. Requires `property_details`. Example: `Central Air` Heating system description. Requires `property_details`. Example: `Forced Air` Roofing material. Requires `property_details`. Example: `Composition` Exterior material. Requires `property_details`. Example: `Stucco` Construction material. Requires `property_details`. Example: `Wood Frame` Architectural style. Requires `property_details`. Example: `Contemporary` Pool features. Requires `property_details`. Example: `In Ground` Fireplace features. Requires `property_details`. Example: `Gas` Total room count. Requires `property_details`. Example: `8` Number of units or unit type. Requires `property_details`. Zoning designation. Requires `property_details`. Example: `R1` FEMA flood zone designation(s), comma-separated. Requires `property_details`. Example: `X` Local noise score. Requires `property_details`. Example: `42` Noise source breakdown (e.g. traffic, airports). Requires `property_details`. Flood Factor risk score 1–10. Requires `property_details`. Example: `2` Flood Factor severity label. Requires `property_details`. Example: `Minimal` Direction of change in flood risk over time. Requires `property_details`. Short summary of the flood risk trend. Requires `property_details`. Full paragraph describing the flood risk trend. Requires `property_details`. Narrative flood insurance guidance. Requires `property_details`. Whether flood insurance is required or recommended. Requires `property_details`. Link to the First Street flood risk report. Requires `property_details`. First Street flood risk record ID. Requires `property_details`. Flood insurance quotes by provider. Requires `property_details`. Environmental flood risk score (similar scale to flood\_factor\_score). Requires `property_details`. Wildfire Factor risk score 1–10. Requires `property_details`. Example: `1` Wildfire Factor severity label. Requires `property_details`. Example: `Minor` Cumulative wildfire risk over the next 30 years. Requires `property_details`. Short summary of the wildfire risk trend. Requires `property_details`. Full paragraph describing the wildfire risk trend. Requires `property_details`. Narrative wildfire insurance guidance. Requires `property_details`. US Forest Service relative wildfire risk narrative. Requires `property_details`. Link to the First Street wildfire risk report. Requires `property_details`. First Street wildfire risk record ID. Requires `property_details`. Wildfire insurance quotes by provider. Requires `property_details`. Whether ownership is non-deeded (e.g. co-op share). Requires `property_details`. Whether the property is fractionally owned. Requires `property_details`. Whether the listed price excludes the land. Requires `property_details`. Whether the property is USDA loan eligible. Requires `property_details`. Whether the listing is a short sale. Requires `property_details`. Whether the listing is an auction. Requires `property_details`. Whether the property is part of a subdivision. Requires `property_details`. Parsed street number. Requires `property_details`. Example: `123` Parsed street name. Requires `property_details`. Example: `Main` Parsed street suffix. Requires `property_details`. Example: `St` Parsed street direction prefix. Requires `property_details`. Example: `N` Parsed unit or apartment number. Requires `property_details`. Example: `4B` Broader search areas (city/state/county) the listing belongs to. Requires `property_details`. Local housing market heat badge for the postal code. Requires `property_details`. Example: `Hot` Listing agent's state real estate license number. Requires `property_details`. Agent's NRDS ID — a stable identifier for deduping the same agent across listings. Requires `property_details`. Stable agent identifier. Requires `property_details`. URL to the agent's Realtor.com profile. Requires `property_details`. Agent's tagline or slogan. Requires `property_details`. Agent's MLS set identifier. Requires `property_details`. Agent's profile photo URL. Requires `property_details`. Agent's business address. Requires `property_details`. All agent phone numbers, typed (mobile, office, etc.) and flagged primary. Requires `property_details`. Stable team identifier when the agent belongs to a team. Requires `property_details`. Team name when the agent belongs to a team. Requires `property_details`. Broker (brokerage company) name. Requires `property_details`. Stable broker identifier. Requires `property_details`. Broker logo image URL. Requires `property_details`. Broker's brand accent color. Requires `property_details`. Broker designations or certifications. Requires `property_details`. Stable brokerage office identifier. Requires `property_details`. Brokerage office name. Requires `property_details`. Brokerage office contact email. Requires `property_details`. URL to the brokerage office's Realtor.com profile. Requires `property_details`. Brokerage office tagline or slogan. Requires `property_details`. Brokerage office's MLS set identifier. Requires `property_details`. Office rental or application URL, when available. Requires `property_details`. Whether the office is outside the listing's community. Requires `property_details`. Brokerage office business hours. Requires `property_details`. Office's direct lead-contact email. Requires `property_details`. Brokerage office photo or logo URL. Requires `property_details`. Brokerage office's full street address. Requires `property_details`. All brokerage office phone numbers, typed and flagged primary. Requires `property_details`. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=1&page_size=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} params = { "squid": "YOUR_SQUID_HASH", "page": 1, "page_size": 50 } all_results = [] url = f"{BASE_URL}/results" while True: response = requests.get(url, headers=headers, params=params) data = response.json() all_results.extend(data["data"]) print(f"Fetched page {data['page']} of {data['total_pages']}") if data["next"] is None: break url = data["next"] params = {} print(f"\nTotal listings collected: {len(all_results)}") for listing in all_results[:5]: print(f"- {listing.get('full_address')} — ${listing.get('price', 0):,} ({listing.get('bed')}bd/{listing.get('bath')}ba)") ``` ## Response ```json 200 theme={null} { "total_results": 120, "limit": 50, "page": 1, "total_pages": 3, "result_from": 1, "result_to": 50, "data": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "url": "https://www.realtor.com/realestateandhomes-detail/123-Main-St_Los-Angeles_CA_90001_M12345-67890", "full_address": "123 Main St, Los Angeles, CA 90001", "street": "123 Main St", "city": "Los Angeles", "state": "CA", "county": "Los Angeles County", "zip_code": "90001", "status": "for_sale", "price": 750000, "sold_price": null, "currency": "USD", "bed": 3, "bath": 2.0, "house_size": 1850, "acre_lot": 0.15, "property_type": "single_family", "is_new_construction": false, "is_foreclosure": false, "pending": false, "brokered_by": "Keller Williams Realty", "lat": 34.052235, "lng": -118.243683, "published_at": "2026-03-10", "list_date": "2026-03-10", "scraping_time": "2026-03-20T09:15:00.000Z" }, { "id": "b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5", "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "url": "https://www.realtor.com/realestateandhomes-detail/15-E-30th-St-Apt-44C_New-York_NY_10016_M90774-92123", "full_address": "15 E 30th St Apt 44C New York, NY 10016", "street": "15 E 30th St Apt 44C", "city": "New York", "state": "NY", "county": "New York", "zip_code": "10016", "status": "for_rent", "price": 12800, "sold_price": null, "currency": "USD", "bed": 1, "bath": 1.5, "house_size": 1100, "acre_lot": null, "property_type": "condos", "is_new_construction": null, "is_foreclosure": false, "pending": false, "brokered_by": "Keller Williams NYC", "lat": 40.745763, "lng": -73.984952, "published_at": "2026-04-28", "list_date": "2026-04-28", "scraping_time": "2026-04-28T17:33:27.629Z" } ], "next": "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=2&page_size=50", "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/realtor-iter-listings/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure settings for your Realtor Listings Scraper squid Update the configuration of your **Realtor Listings Scraper** squid. Pass crawler-specific settings inside the `params` object. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Crawler-specific settings. See fields below. ## Settings Fields Maximum number of listings to collect per task. Leave empty for unlimited. Maximum number of unique results across all tasks in a run. Leave empty for unlimited. Visit each listing detail page to collect the full photo gallery, agent and office details, description text, price/tax history, schools, spec sheet, risk scores, and more. Requires one additional request per listing. Filter listings by one or more keywords, comma-separated (e.g. `pool, ocean view`). Only listings whose description contains at least one keyword are returned. Only collect listings published after this point (based on `published_at`). Accepts a relative duration (e.g. `"24h"`, `"7d"`, `"2w"`) or an absolute date (`"YYYY-MM-DD HH:MM"`). Timezone for interpreting an absolute `fetch_since` date (e.g. `"America/New_York"`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `"24h"` or `"7d"`. Set `fetch_since` to `null` to collect all listings, or use a relative duration (`"24h"`, `"7d"`, `"2w"`) or absolute date (`"YYYY-MM-DD HH:MM"`) to collect only recent listings. When using an absolute date, set `fetch_since_timezone` to interpret it in the correct timezone (e.g. `"America/New_York"`). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Realtor California Listings", "params": { "max_results": 200, "fetch_since": "7d", "fetch_since_timezone": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={ "name": "Realtor California Listings", "params": { "max_results": 200, "fetch_since": "7d", # relative: "24h", "7d", "2w" | absolute: "2026-01-01 00:00:00" "fetch_since_timezone": None # e.g. "America/New_York" — only used with absolute fetch_since } } ) data = response.json() print(f"Squid updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "id": "YOUR_SQUID_HASH", "name": "Realtor California Listings", "crawler": { "id": "f388a9866f943bc5c29bde8b33587bd3", "name": "Realtor Iter Listings", "slug": "realtor-iter-listings" }, "params": { "max_results": 200, "fetch_since": "7d", "fetch_since_timezone": null }, "concurrency": 1, "export_unique_results": true, "to_complete": true, "no_line_breaks": false, "status": "idle", "created_at": "2025-01-20T10:15:00.000000", "updated_at": "2025-01-27T14:35:00.000000" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/reddit-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Reddit URLs to scrape posts, comments, user profiles, or subreddits Add Reddit URLs to collect posts, comments, user profiles, or subreddit metadata. The scraper handles post threads (with nested comments), subreddit feeds, user profile pages, and global or subreddit-scoped search results. Crawler ID: `6f99262f742b533d96936bf4088fba3e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Reddit Scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Reddit URL to scrape — see supported URL types below | ## Supported URL Types | Type | Example | | - | - | | Post thread | `https://www.reddit.com/r/Bitcoin/comments/1rcbgsa/crypto_beginners/` | | Subreddit | `https://www.reddit.com/r/Bitcoin/` | | User profile | `https://www.reddit.com/user/thisisbillgates/` | | Global search | `https://www.reddit.com/search/?q=bitcoin` | | Subreddit search | `https://www.reddit.com/r/Bitcoin/search/?q=lightning` | For post URLs, the scraper returns one row for the post itself and one row per comment. Use `skip_comments` or `skip_posts` in settings to limit output to just one type. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.reddit.com/r/Bitcoin/" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "squid": squid_id, "tasks": [ {"url": "https://www.reddit.com/r/Bitcoin/"}, {"url": "https://www.reddit.com/r/Bitcoin/comments/1rcbgsa/crypto_beginners/"}, {"url": "https://www.reddit.com/user/thisisbillgates/"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2026-05-20T10:00:00.000000", "is_active": true, "params": { "url": "https://www.reddit.com/r/Bitcoin/" }, "module": 118, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/reddit-scraper/credit-cost Credit cost for the Reddit Scraper 1 credit per result # Get Results Source: https://docs.lobstr.io/examples/reddit-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Reddit Scraper Retrieve scraped data from your **Reddit Scraper** runs. Each result row represents a post, comment, user profile, or subreddit — indicated by the `type` field. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Row type: `post` for the post itself, `comment` for a comment, `user` for a user profile, `subreddit` for subreddit metadata. Example: `post` Canonical URL of the Reddit post. Example: `https://www.reddit.com/r/Bitcoin/comments/1rcbgsa/crypto_beginners/` Reddit post ID (base36 identifier). Example: `1rcbgsa` Title of the Reddit post. Example: `Crypto beginners guide` Text body of the post (for text posts) or comment text (for comment rows). Example: `Here's everything you need to know as a beginner.` Type of post: `text`, `image`, `link`, `video`, etc. Example: `text` Upvote score of the post or comment. Example: `1842` Number of comments on the post. Populated for `type='post'` rows. Example: `126` Number of awards received by the post. Example: `3` Username of the post or comment author. Example: `Independent_Lynx715` Reddit ID of the author. Example: `t2_19xe8ly1c0` Name of the subreddit (without prefix). Example: `Bitcoin` Subreddit name with `r/` prefix. Example: `r/Bitcoin` Reddit ID of the subreddit. Example: `t5_3oxtd` Post flair label (if any). Example: `Discussion` Domain of the post content. `self.xxx` for text posts, or the external domain for link posts. Example: `self.Bitcoin` Detected language of the post (ISO 639-1). Example: `en` UTC timestamp when the post or comment was created. Example: `2026-04-23T11:16:27` Reddit comment ID (base36). Populated for `type='comment'` rows only. Example: `ohsv4v5` Parent comment ID for nested replies. Populated for replies; null for top-level comments and post rows. Example: `ohsv4v5` Comment nesting depth (0 = top-level comment). Null for post rows. Example: `0` Total karma of the user. Populated for `type='user'` rows only. Example: `87` Post karma of the user. Populated for `type='user'` rows only. Example: `17` Comment karma of the user. Populated for `type='user'` rows only. Example: `70` Number of contributions by the user. Populated for `type='user'` rows only. Example: `7` JSON array of trophy names earned by the user. Populated for `type='user'` rows only. Example: `["Five-Year Club"]` JSON array of subreddits the user is active in (prefixed). Populated for `type='user'` rows only. Example: `["r/Bitcoin", "r/PostCardExchange"]` JSON array of subreddits the user moderates (prefixed). Populated for `type='user'` rows only. Example: `["r/belikeme"]` Description of the subreddit. Populated for `type='subreddit'` rows only. Example: `A community dedicated to Bitcoin.` Number of weekly active users in the subreddit. Populated for `type='subreddit'` rows only. Example: `1208799` Number of weekly contributions (posts + comments) in the subreddit. Populated for `type='subreddit'` rows only. Example: `18683` JSON array of subreddit rules, each with `number`, `title`, and `description`. Populated for `type='subreddit'` rows only. Example: `[{"number": "1", "title": "Be civil", "description": "..."}]` JSON array of community resource links, each with `text` and `url`. Populated for `type='subreddit'` rows only. Example: `[{"text": "Wiki", "url": "https://www.reddit.com/r/Bitcoin/wiki/"}]` Ratio of upvotes to total votes (0.0–1.0). Populated for post rows. Example: `0.97` Whether the post has been locked by moderators (no new comments allowed). Example: `false` Whether the post is archived (older than 6 months; no new votes or comments allowed). Example: `false` Whether the post is stickied (pinned) by a moderator. Example: `false` Whether the post is marked as NSFW (18+). Example: `false` Whether the post is marked as a spoiler. Example: `false` Whether the post is a native Reddit video. Example: `false` Whether the post contains a gallery of images. Example: `false` Direct URL of the post's media (video or external image). Null for text and self posts. Preview thumbnail URL for image and video posts. Null for text posts. HTML-rendered body of the post. Populated only for direct post URL scrapes. Character count of the plain-text post body. `0` for posts with no body (image, video, link). Example: `342` HTML-rendered body of the comment. Null for non-comment rows. Age of the post in hours at scraping time, derived from `created_at`. Example: `18.4` Post score divided by age in hours — measures engagement velocity. Example: `245.3` `comment_count` divided by `max(score, 1)`. High values indicate discussion-heavy posts. Example: `0.08` `true` if `score_per_hour > 50` or `comment_to_score_ratio > 0.1`. Example: `true` Whether the post was made with special authority: `moderator`, `admin`, or null. Example: `null` Whether the post is a paid advertisement (sponsored/promoted). Example: `false` Whether the post is a text/self post (no external link). Example: `true` Reddit short URL for the post (`https://redd.it/{post_id}`). Example: `https://redd.it/1rcbgsa` Whether the post or comment has been edited after submission. Example: `false` ISO timestamp of when the post was last edited. Null if never edited. Number of times this post has been crossposted to other subreddits. Example: `3` The post author's flair text in the subreddit at the time of posting. Example: `OG Member` Whether the post or comment author has Reddit Premium. Example: `false` Number of times this post has been gilded (awarded Reddit Gold). Example: `0` Whether the post was marked as Original Content (OC) by the author. Example: `false` Number of subscribers in the subreddit at scraping time. Example: `7234891` The `post_id` of the original post if this is a crosspost. Null otherwise. Sort order suggested by the subreddit moderators for this post's comments. Example: `top` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 81473, "object": "result", "squid": "23d48753dff0014766ec0db16c053cd1", "run": "3a9ec8b1a9662d20fff061f98e5dc26b", "type": "post", "url": "https://www.reddit.com/r/developpeurs/comments/1stfrij/pourquoi_y_atil_si_peu_de_femmes_en_informatique/", "post_id": "1stfrij", "title": "Pourquoi y a-t-il si peu de femmes en informatique ?", "body": "Je bosse dans une ESN, ~1000 personnes. On est facilement à 90% d'hommes dans les équipes tech.", "post_type": "text", "score": 19, "comment_count": 126, "award_count": 0, "author": "Independent_Lynx715", "author_id": "t2_19xe8ly1c0", "subreddit": "developpeurs", "subreddit_prefixed_name": "r/developpeurs", "subreddit_id": "t5_3oxtd", "flair": "Carrière", "domain": "self.developpeurs", "language": "fr", "created_at": "2026-04-23T11:16:27", "comment_id": "ohsv4v5", "parent_id": "ohsv4v5", "depth": 0, "karma": 87, "post_karma": 17, "comment_karma": 70, "contributions": 7, "trophies": "[\"Five-Year Club\"]", "active_subreddits": "[\"r/Bitcoin\", \"r/PostCardExchange\"]", "moderated_subreddits": "[\"r/belikeme\"]", "subreddit_description": "A community dedicated to sharing...", "weekly_active_users": 1208799, "weekly_contributions": 18683, "subreddit_rules": "[{\"number\": \"1\", \"title\": \"Be civil\", \"description\": \"...\"}]", "subreddit_resources": "[{\"text\": \"Wiki\", \"url\": \"https://www.reddit.com/r/example/wiki/\"}]", "upvote_ratio": 0.95, "locked": false, "archived": false, "stickied": false, "over_18": false, "spoiler": false, "is_video": false, "is_gallery": false, "media_url": "https://v.redd.it/abtj8w6xf7ah1", "thumbnail": "https://external-preview.redd.it/example.png", "body_html": "

Post body as HTML

", "body_length": 142, "comment_body_html": "

Great point, thanks for sharing!

", "age_hours": 3.75, "score_per_hour": 127.4, "comment_to_score_ratio": 0.312, "is_high_engagement": true, "distinguished_as": "moderator", "is_promoted": false, "is_self": true, "shortlink": "https://redd.it/abc123", "edited": false, "edited_at": "2026-01-15T10:30:00", "num_crossposts": 3, "author_flair": "Top Contributor", "author_premium": false, "gilded": 0, "is_original_content": false, "subreddit_subscribers": 1250000, "crosspost_parent_id": "xyz789", "suggested_sort": "top", "functions": null, "native_id": 81473 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/reddit-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Reddit Scraper settings and filters Configure your Reddit Scraper squid settings. Control sort order per input type, filter by date, limit results, and choose whether to include posts, comments, or both. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of rows (posts + comments) to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **fetch\_since** | string | null | Stop collecting content older than this threshold. The task ends at the first older post, so use it with `sort_subreddit` set to `new`. Use a relative duration (`24h`, `7d`, `2w`) or absolute date (`YYYY-MM-DD HH:MM:SS`) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Ignored for relative values | | **sort\_comments** | string | `best` | Sort order for post thread comments: `best`, `top`, `new`, `controversial`, `old`, `q&a` | | **sort\_search** | string | `relevance` | Sort order for search results: `relevance`, `hot`, `top`, `new`, `comments`. With `relevance`, `top` or `comments`, the time window is set by `sort_period` | | **sort\_subreddit** | string | `hot` | Sort order for subreddit feeds: `hot`, `new`, `top`, `rising`, `controversial`. With `top` and `controversial`, the time window is set by `sort_period` | | **sort\_period** | string | `all` | Time window of the ranking: `all`, `year`, `month`, `week`, `day`, `hour`. Applies to subreddit feeds sorted by `top` or `controversial`, and to searches sorted by `relevance`, `top` or `comments`. A `t` already in the task URL (e.g. `https://www.reddit.com/r/Bitcoin/top/?t=year`) wins | | **include\_nsfw** | boolean | `false` | Include NSFW (adult) posts and comments in results | | **skip\_comments** | boolean | `false` | Return only post rows — skip all comments | | **skip\_posts** | boolean | `false` | Skip post rows. For post URLs: returns comments only. For user URLs: returns profile and comments. For subreddit URLs: returns subreddit metadata only | | **max\_depth** | integer | unlimited | Maximum nesting depth of comments to collect. `0` = top-level comments only, `1` = top-level + first replies, etc. Leave empty for full thread | | **keyword** | string | null | Search keyword. Automatically constructs a Reddit search URL for the given keyword and subreddit(s) — no need to manually craft search URLs | | **post\_type** | string | `any` | Filter search results by post type: `any`, `image`, `video`. Wired to Reddit's real media tabs; other values (previously `link`, `self`, `richvideo`) are not accepted by Reddit's search and have been removed. Only applies to search URLs and keyword searches | | **search\_comments** | boolean | false | Search within comment bodies instead of post titles. Only applies to search URLs and keyword searches | ## Squid Settings | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | The `sort_comments`, `sort_search`, and `sort_subreddit` parameters are each applied only when the input URL matches the corresponding type — they do not conflict with each other. `fetch_since` filters based on the `created_at` field of each post or comment. It is useful for incremental runs to avoid re-collecting old content. Reddit serves about 1,000 posts per feed at most (new, top, controversial, search). On a busy subreddit, `new` only reaches back a few weeks. To go back further, add the same subreddit several times with different sorts and periods in the URL, plus keyword searches scoped to it, then dedupe on `post_id`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Reddit Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 500, "fetch_since": "7d", "sort_subreddit": "hot", "sort_comments": "top", "skip_comments": false, "skip_posts": false, "include_nsfw": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Reddit Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 500, "fetch_since": "7d", "sort_subreddit": "hot", "sort_comments": "top", "skip_comments": False, "skip_posts": False, "include_nsfw": False } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Reddit Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 500, "fetch_since": "7d", "sort_subreddit": "hot", "sort_comments": "top", "skip_comments": false, "skip_posts": false, "include_nsfw": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/sales-nav-profile-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Sales Navigator Profile Scraper squid Add URLs or inputs to your **Sales Navigator Profile Scraper** squid. Each task object must include the required fields below. Crawler ID: `40d08f9bfec4a8775bb5586ce7b33a35` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/sales-nav-profile-scraper/credit-cost Credit cost for the Sales Navigator Profile Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Profiles | 1 | 1 credit per profile. | | Email Enrichment | 9 | 9 credits per profile enriched. No email = 0 credits. | | Phone Enrichment | 300 | 300 credits per profile enriched. No phone number = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/sales-nav-profile-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Sales Navigator Profile Scraper Retrieve scraped data from your **Sales Navigator Profile Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Sales Navigator profile ID. Example: `ACwAAAGHtboB_SK60RCbrgLUstRVuTcNlzAHfPU` LinkedIn public ID (slug). Example: `danadelstein` First name. Example: `Daniel (Dan)` Last name. Example: `Adelstein` Full name. Example: `Daniel (Dan) Adelstein` Profile headline. Example: `Senior Vice President of International Development at Xponential Fitness (NYSE:XPOF)` Current job title. Example: `Senior Vice President of International Development` Current company name. Example: `Xponential Fitness` Current company LinkedIn URL. Example: `https://www.linkedin.com/company/19193147/` Profile location. Example: `Lake Worth, Florida, United States` Email address found or enriched for this person. Example: `danieladelstein@yahoo.com` Email status. Example: `valid` Mobile phone number. Example: `+1-555-000-0000` LinkedIn public profile URL. Example: `https://www.linkedin.com/in/danadelstein` LinkedIn Sales Navigator profile URL. Example: `https://www.linkedin.com/sales/people/ACwAAAGHtboB_SK60RCbrgLUstRVuTcNlzAHfPU,NAME_SEARCH,3tl8` Profile picture URL. Example: `https://media.licdn.com/dms/image/C4E03AQFelTC96_eCyQ/profile-displayphoto-shrink_100_100/0/1649968936543` Profile background picture URL. Example: `https://media.licdn.com/dms/image/C4E16AQGSyK_L6GSwng/profile-displaybackgroundimage-shrink_200_800/0/1648546335745` Profile summary / about section. Example: `Founded in 2017 and headquartered in Irvine, California...` Current position details. Example: `{'companyName': 'Xponential Fitness', 'title': 'Senior Vice President of International Development', 'companyUrn': 'urn:li:fs_salesCompany:19193147', 'current': True, 'location': 'Irvine, CA.', 'startedOn': {'year': 2022, 'month': 3}, 'endedOn': {}}` Most recent past job title. Example: `Associate Vice President of Franchise Development` Most recent past company name. Example: `Mathnasium - The Math Learning Center` All work positions / experience. Example: `[]` Most recent school name. Example: `University of Florida` Most recent school LinkedIn URL. Example: `https://www.linkedin.com/school/uflorida/` Education history. Example: `[]` Skills and endorsement counts. Example: `[]` Languages spoken. Example: `[]` Volunteering experience entries. Example: `[]` Connection degree (1, 2, or 3). Example: `2` Number of connections. Example: `7869` Number of shared connections with the scraping account. Example: `2` Mutual connections between you and this profile. Example: `[]` Recent posts and comments (last 90 days) with text, reactions, comments count. Example: `[]` Spotlight badges (mutual connections, recent posts, etc.). Example: `[{'id': 'SECOND_DEGREE_CONNECTION', 'displayValue': '2 mutual connections'}]` Companies, schools and groups this person follows (up to 10). Example: `[]` Total number of entities this person follows. Example: `608` Type of last interaction with this profile. Example: `VIEW_PROFILE` Timestamp (ms) of last interaction with this profile. Example: `1687496301805` Whether the profile has OpenLink enabled. Example: `false` Whether the profile has LinkedIn Premium. Example: `false` Whether there is a pending connection invitation. Example: `false` Whether the lead is saved in Sales Navigator. Example: `false` Whether the profile has been viewed. Example: `true` Whether the profile is unlocked in Sales Navigator. Example: `false` Full name pronunciation audio metadata. Example: `{}` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 97477, "object": "result", "squid": "1743a4c88b8c165f5759d466dd4e5ec0", "run": "85cc34770298b4c48dd97b79778c2701", "profile_id": "ACwAAAGHtboB_SK60RCbrgLUstRVuTcNlzAHfPU", "public_id": "danadelstein", "first_name": "Daniel (Dan)", "last_name": "Adelstein", "full_name": "Daniel (Dan) Adelstein", "headline": "Senior Vice President of International Development at Xponential Fitness (NYSE:XPOF)", "job_title": "Senior Vice President of International Development", "company_name": "Xponential Fitness", "current_company_url": "https://www.linkedin.com/company/19193147/", "location": "Lake Worth, Florida, United States", "email": "danieladelstein@yahoo.com", "email_status": "valid", "mobile_phone": "+1-555-000-0000", "public_url": "https://www.linkedin.com/in/danadelstein", "sales_navigator_url": "https://www.linkedin.com/sales/people/ACwAAAGHtboB_SK60RCbrgLUstRVuTcNlzAHfPU,NAME_SEARCH,3tl8", "profile_picture_url": "https://media.licdn.com/dms/image/C4E03AQFelTC96_eCyQ/profile-displayphoto-shrink_100_100/0/1649968936543", "profile_background_picture_url": "https://media.licdn.com/dms/image/C4E16AQGSyK_L6GSwng/profile-displaybackgroundimage-shrink_200_800/0/1648546335745", "summary": "Founded in 2017 and headquartered in Irvine, California...", "current_position": { "companyName": "Xponential Fitness", "title": "Senior Vice President of International Development", "companyUrn": "urn:li:fs_salesCompany:19193147", "current": true, "location": "Irvine, CA.", "startedOn": { "year": 2022, "month": 3 }, "endedOn": {} }, "past_job": "Associate Vice President of Franchise Development", "past_company_name": "Mathnasium - The Math Learning Center", "positions": [], "past_school": "University of Florida", "past_school_url": "https://www.linkedin.com/school/uflorida/", "educations": [], "skills": [], "languages": [], "volunteering_experiences": [], "connection_type": 2, "num_of_connections": 7869, "num_of_shared_connections": 2, "shared_connections": [], "recent_posts": [], "spotlight_badges": [ { "id": "SECOND_DEGREE_CONNECTION", "displayValue": "2 mutual connections" } ], "following": [], "following_count": 608, "last_interaction_type": "VIEW_PROFILE", "last_interaction_time": 1687496301805, "open_link": false, "premium": false, "pending_invitation": false, "saved": false, "viewed": true, "unlocked": false, "full_name_pronunciation_audio": {}, "functions": null, "native_id": 97477 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/sales-nav-profile-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Sales Navigator Profile Scraper settings Configure your Sales Navigator Profile Scraper squid settings. Enable email and mobile enrichment to find contact details for the profiles you scrape. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Optional Functions Enable these in the `params.functions` object: | Function | Type | Default | Description | | - | - | - | - | | **email\_enrichment** | boolean | true | Find email addresses for each profile (9 credits per profile where an email is found) | | **mobile\_enrichment** | boolean | false | Find mobile phone numbers for each profile (300 credits per profile where a mobile number is found) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **accounts** | array | Array of linked Sales Navigator account hashes (required) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | `email_enrichment` is enabled by default and costs 9 credits per profile where an email is found. Disable it if you don't need email data. `mobile_enrichment` costs 300 credits per profile where a mobile number is found. Only enable when mobile numbers are specifically required. This scraper requires a synced Sales Navigator account. Add your LinkedIn Sales Navigator cookies in the Accounts section before running. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Sales Nav Profile Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "email_enrichment": true, "mobile_enrichment": false } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Sales Nav Profile Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "functions": { "email_enrichment": True, # 9 credits per profile with email "mobile_enrichment": False # 300 credits per profile with mobile } } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Sales Nav Profile Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "email_enrichment": true, "mobile_enrichment": false } } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/sales-navigator-companies-scraper/add-tasks POST https://api.lobstr.io/v2/squid/{squid_id}/task Add Sales Navigator company search URLs to scrape using the lobstr.io API Add Sales Navigator company search URLs as tasks to your squid. The scraper will export all companies matching your search filters. Crawler ID: `6b66cba236b64604581864230e1f4d36` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## URL Format The scraper accepts three types of Sales Navigator company URLs: * **Search URL** — a filtered company search: `https://www.linkedin.com/sales/search/company?query=(keywords:technology)` * **Custom list URL** — a saved company list: `https://www.linkedin.com/sales/lists/company/YOUR_LIST_ID` * **All Saved Accounts dashboard** — your full saved accounts list: `https://www.linkedin.com/sales/accounts/dashboard` Build your search or open a saved list in Sales Navigator, then copy the URL from your browser. ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Sales Navigator company search URL, custom list URL, or All Saved Accounts dashboard URL | Build your search in Sales Navigator first, apply all filters, then copy the URL to ensure accurate results. This scraper requires a linked Sales Navigator account. Connect your account in lobstr.io settings first. Each search URL can return up to 2,500 companies (100 pages × 25 results per page). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.linkedin.com/sales/search/company?query=(keywords:technology)" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "url": "https://www.linkedin.com/sales/search/company?query=(keywords:technology)" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123def456", "status": "pending", "created_at": "2025-01-15T10:30:00Z", "url": "https://www.linkedin.com/sales/search/company?query=(keywords:technology)" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/sales-navigator-companies-scraper/credit-cost Credit cost for the Sales Navigator Companies Scraper 1 credit per company. # Get Results Source: https://docs.lobstr.io/examples/sales-navigator-companies-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Sales Navigator Companies Scraper Retrieve scraped data from your **Sales Navigator Companies Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Name of the company as listed on LinkedIn Sales Navigator. Example: `Tesla` Unique LinkedIn identifier for the company. Example: `15564` LinkedIn company page URL. Example: `https://www.linkedin.com/sales/company/15564` URL of the company's LinkedIn logo or profile image. Example: `https://media.licdn.com/dms/image/v2/C4D0BAQHUcu98SZ2TVw/company-logo_400_400/company-logo_400_400/0/1630576446368/tesla_motors_logo?e=1775692800&v=beta&t=Us0zonMvyG5zEfLxKeZlk6JOmvV8tGtBIyHjJdWmBUc` Company description from the LinkedIn company page. Example: \`Tesla is accelerating the world’s transition to sustainable abundance. To achieve our mission, we’re building a world powered by solar, enabled by battery storage and transported by electric vehicles. We’re committed to hiring and developing top talent from around the world for any given discipline. Headquartered in Texas, we operate six huge, vertically integrated factories across three continents. With over 100,000 employees, our teams take a first-principles approach to designing, building, selling and servicing our products in-house. Our world-class teams operate with a non-conventional philosophy of inter-disciplinary collaboration. Each member of the team is expected to challenge and to be challenged, to create, and to innovate. We’re tackling the world’s most difficult and important problems—and we wouldn’t succeed without our shared passion for making the world a better place.\` Company size by number of employees (e.g. 51–200, 1001–5000). Example: `10,001+ employees` Employee count as displayed on the LinkedIn company page. Example: `83K+` Industry the company operates in. Example: `Motor Vehicle Manufacturing` Whether the company is saved as a lead in LinkedIn Sales Navigator. Example: `false` ### Detail Fields The following fields require `get_details: true` in settings. Clean apex domain of the company's own website, lowercased. Example: `tesla.com` The company's own website URL, exactly as listed on LinkedIn. Example: `https://www.tesla.com` LinkedIn company page URL built on the company slug. Example: `https://www.linkedin.com/company/tesla-motors` Exact number of employees listed on LinkedIn. Example: `127855` Year the company was founded. Example: `2003` Comma-separated list of the company's specialties. Example: `Electric Vehicles, Clean Energy, Battery Storage` Company type, e.g. Public Company, Privately Held, Nonprofit. Example: `Public Company` Estimated yearly revenue range. Example: `$10+ billion` Location of the company headquarters. Example: `Austin, Texas, United States` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 63495, "object": "result", "squid": "2e19b66a056aec983418220364b539ef", "run": "21d1e616d4d6527ea11b0d13fbc5e96a", "company_name": "Tesla", "company_id": 15564, "company_url": "https://www.linkedin.com/sales/company/15564", "company_picture": "https://media.licdn.com/dms/image/v2/C4D0BAQHUcu98SZ2TVw/company-logo_400_400/company-logo_400_400/0/1630576446368/tesla_motors_logo?e=1775692800&v=beta&t=Us0zonMvyG5zEfLxKeZlk6JOmvV8tGtBIyHjJdWmBUc", "description": "Tesla is accelerating the world’s transition to sustainable abundance. To achieve our mission, we’re building a world powered by solar, enabled by battery storage and transported by electric vehicles.\n \nWe’re committed to hiring and developing top talent from around the world for any given discipline. Headquartered in Texas, we operate six huge, vertically integrated factories across three continents. With over 100,000 employees, our teams take a first-principles approach to designing, building, selling and servicing our products in-house.\n \nOur world-class teams operate with a non-conventional philosophy of inter-disciplinary collaboration. Each member of the team is expected to challenge and to be challenged, to create, and to innovate. We’re tackling the world’s most difficult and important problems—and we wouldn’t succeed without our shared passion for making the world a better place.", "employee_count_range": "10,001+ employees", "employee_display_count": "83K+", "industry": "Motor Vehicle Manufacturing", "is_saved": false, "functions": null, "native_id": 63495 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/sales-navigator-companies-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Sales Navigator Companies Scraper settings Configure your Sales Navigator Companies Scraper squid settings. Control pagination depth and result limits. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 100 | Maximum number of search result pages to scrape (max: 100) | | **max\_results** | integer | unlimited | Maximum companies to collect per task (max: 5000) | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **get\_details** | boolean | false | Collect extra details for each company: website, domain, LinkedIn page URL, exact employee count, founded year, specialties, company type, revenue range, and headquarters location | Setting `get_details: true` enables additional company detail fields in results. ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | ## Pagination Sales Navigator displays 25 companies per page. With `max_pages` set to 100 (default), you can collect up to 2,500 companies per search URL. For larger datasets, use multiple search URLs with different filters. Set `max_pages` to a lower value if you only need companies from the first few pages of results. Credits are charged per company collected (1 credit per company). ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Sales Navigator Companies Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 50, "max_results": 1000, "get_details": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings payload = { "name": "Sales Navigator Companies Scraper (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 50, "max_results": 1000, "get_details": False } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Sales Navigator Companies Scraper (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 50, "max_results": 1000, "get_details": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/sales-navigator-leads-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add LinkedIn Sales Navigator search URLs to scrape lead profiles Add LinkedIn Sales Navigator search URLs to scrape lead profiles. This scraper requires a linked Sales Navigator account to access the data. Copy the search URL directly from Sales Navigator after applying your filters (company size, seniority level, industry, location, etc.). The scraper will paginate through the search results automatically. Crawler ID: `a1d243d3824a1ac773414416eb80362d` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Sales Navigator Leads Scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Sales Navigator people search URL (e.g., `https://www.linkedin.com/sales/search/people?query=...`) | Apply filters in Sales Navigator first, then copy the URL. All filter parameters will be preserved. This scraper requires a linked Sales Navigator account. Ensure your account is properly connected before running. You can use saved searches in Sales Navigator and copy their URLs as tasks. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.linkedin.com/sales/search/people?query=(filters:List((type:SENIORITY_LEVEL,values:List((id:300,text:Vice%20President)))))" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Sales Navigator search URLs # Copy the URL directly from Sales Navigator after applying filters payload = { "squid": squid_id, "tasks": [ { "url": "https://www.linkedin.com/sales/search/people?query=(filters:List((type:SENIORITY_LEVEL,values:List((id:300,text:Vice%20President)))))" } ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "1995ef75ed06f21b514298b31caa8139", "created_at": "2025-07-07T10:04:54.651445", "is_active": true, "params": { "url": "https://www.linkedin.com/sales/search/people?query=(filters:List((type:SENIORITY_LEVEL,values:List((id:300,text:Vice%20President)))))" }, "module": 2, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/sales-navigator-leads-scraper/credit-cost Credit cost for the Sales Navigator Leads Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Leads | 1 | 1 credit per profile. | | Email Enrichment | 9 | 9 credits per profile enriched. No email = 0 credits. | | Phone Enrichment | 300 | 300 credits per profile enriched. No phone number = 0 credits. | | Get Profile Details | 1 | 1 credit per profile | # Get Results Source: https://docs.lobstr.io/examples/sales-navigator-leads-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Sales Navigator Leads Scraper Retrieve scraped data from your **Sales Navigator Leads Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object represents one person. Most fields are populated directly from the Sales Navigator search results; `positions`, `education`, `websites`, and `company` are nested groups only populated when the `get_profile_details` enrichment function is enabled on the squid. Unique internal identifier for the record. Example: `21e281488adf43086782b731d9c19e0b` Date and time this record was scraped. Example: `2026-03-19 10:36:09.000000+00` Name of the company this person works at. Example: `Gugin - Creating Winning Corporate Cultures and culturally intelligent leaders` LinkedIn unique identifier for the company. Example: `796142` Email address found or enriched for this person. Example: `fm@gugin.com` Validation status of the email address (e.g. valid, risky, invalid). Example: `valid` Mobile phone number found or enriched for this person First name of the LinkedIn member. Example: `Dr. Finn` Last name of the LinkedIn member. Example: `Majlergaard` Location as shown on the LinkedIn profile. Example: `Greater Nice Metropolitan Area` Position of this person in the Sales Navigator search results. Example: `Founder and CEO` Number of years the person has been in their current role. Example: `22` Number of years the person has been at their current company. Example: `22` Number of months the person has been in their current role. Example: `10` URL to the person's LinkedIn Sales Navigator profile. Example: `https://www.linkedin.com/sales/people/ACwAAAAFQjgBtNxy28alABzs_jj2meNVjFO0AUs,NAME_SEARCH,nwRo` URL of the person's LinkedIn profile picture. Example: `https://media.licdn.com/dms/image/v2/D4D03AQEwqlTdXSN6Rg/profile-displayphoto-shrink_800_800/B4DZQ7HXczHUAo-/0/1736158574857?e=1762387200&v=beta&t=4l7DbJzZ1VDT8WePPQDs99CHAFe-Y34zzihrZehJEIw` Start date of the person's current position. Example: `2002-11-30 23:00:00+00` Industry the person works in. Example: `Higher Education` Professional headline shown on the LinkedIn profile. Example: `Author of: The Dangerous AI Gamble in Education🍀 I/we help organisations develop winning company culture 🍀 I/we Gugin train leaders to become culturally and emotionally intelligent 🍀Professor 🍀 keynote speaker` About or summary text from the LinkedIn profile. Example: \`Founder and CEO @ Gugin | Creating Winning Corporate Cultures I am the person you come to when your organisation is falling apart because of a toxic workplace culture. Our Gugin team have saved organisations (and leaders) for more than 20 years. I am the person you come to when you need a zip to tie two organisations together after a merger or acquisition I am the person you come to when you want a really thought-provoking speech on leadership for your next event or conference.\` Number of LinkedIn connections. Example: `500` URL to the person's public LinkedIn profile. Example: `https://www.linkedin.com/in/ACwAAAAFQjgBtNxy28alABzs_jj2meNVjFO0AUs` Whether the person has indicated they are open to new opportunities. Example: `false` Whether the person has the LinkedIn Open To Work badge enabled. Example: `false` URL to the person's Twitter/X profile, if linked on their LinkedIn profile. Example: `https://twitter.com/example` Unique LinkedIn Sales Navigator identifier for this person. Example: `344632` Degree of connection between this person and the scraping account (1st, 2nd, 3rd). Example: `2nd` Industry sector of the company this person works at. Example: `Business Consulting and Services` Whether the profile has LinkedIn OpenLink enabled (accepts InMail from anyone). Example: `false` Whether this lead is saved in LinkedIn Sales Navigator. Example: `false` Whether this person has LinkedIn Premium. Example: `false` Whether this result matched all the applied Sales Navigator search filters. Example: `true` Reason this result did not match the applied Sales Navigator filters Seniority level of the person's current position (e.g. Director, Manager, Entry). Example: `CXO, Senior` Whether the person has been in their current position for fewer than 3 months. Example: `false` Whether a LinkedIn connection invitation is pending from the scraping account to this person. Example: `false` Full text of the job description for the person's current role. Requires `get_profile_details`. URL of the person's LinkedIn profile banner/background image. Requires `get_profile_details`. Work history. Requires `get_profile_details`. Unique identifier for this position. Example: `344632796142` Whether this is a newly added position. Example: `false` Whether this is the current active position. Example: `true` Company name for this position. Example: `Gugin - Creating Winning Corporate Cultures and culturally intelligent leaders` LinkedIn company identifier for this position. Example: `796142` Description of responsibilities in this position Location of this position. Example: `Nice, Provence-Alpes-Côte d'Azur, France` Job title for this position. Example: `Founder and CEO` Start date of this position. Example: `2002-12-01 00:00:00+00` End date of this position (null if current) Duration of this position in years. Example: `22.83` Education history. Requires `get_profile_details`. Unique identifier for this education entry Name of the educational institution Degree or qualification obtained. Example: `Doctor of Business Administration` Fields or subjects studied. Example: `Business Administration` Start date of this education. Example: `2005-01-01` End date of this education. Example: `2010-01-01` Websites listed on the person's LinkedIn profile. Requires `get_profile_details`. Category type of the website (e.g. COMPANY, PERSONAL). Example: `COMPANY` Website URL. Example: `https://gugin.com` LinkedIn company identifier, if the website is tied to a company. Example: `796142` Detailed data on the person's current company. Requires `get_profile_details`. Time elapsed since last company data update Revenue amount formatted for display. Example: `1.0` Unit of formatted revenue (e.g. millions, billions). Example: `mil` Currency code for formatted revenue. Example: `USD` Company description. Example: `Gugins core competence is to help companies around the world taking advantage of cultural diversity. 2/3 of all M&A's fail to meet their objectives due to cultural clashes. This is what we do: cultural due diligence, post merger integration, damage control after failed M&A's, develop and deploy cultural intelligence, develop internationalisation strategies, develop and carry out global management training on cross-cultural management, coaching of senior executive management teams.` Company industry. Example: `Business Consulting and Services` Total number of employees Raw revenue amount Currency code for revenue. Example: `USD` URL to the company's LinkedIn flagship page. Example: `https://www.linkedin.com/company/gugin---delivering-cultural-intelligence/` Company LinkedIn URL. Example: `https://www.linkedin.com/company/gugin---delivering-cultural-intelligence/` Company website domain. Example: `gugin.com` Company website URL. Example: `https://gugin.com` Employee count range (e.g. 1001-5000). Example: `11-50` Country of company headquarters. Example: `France` Geographical area of company headquarters. Example: `Provence-Alpes-Côte d'Azur` City of company headquarters. Example: `Nice` Postal code of company headquarters Street address of company headquarters Company name. Example: `Gugin - Creating Winning Corporate Cultures and culturally intelligent leaders` Company location. Example: `Nice, Provence-Alpes-Côte d'Azur, France` Whether company data was unavailable at scrape time. Example: `false` Whether detailed company data was collected. Example: `true` Timestamp when detailed data was collected Timestamp of the last scraping Whether the company was not found on LinkedIn. Example: `false` Whether employee details were unavailable. Example: `true` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": "21e281488adf43086782b731d9c19e0b", "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "collected_at": "2026-03-19 10:36:09.000000+00", "company_name": "Gugin - Creating Winning Corporate Cultures and culturally intelligent leaders", "company_id": "796142", "email": "fm@gugin.com", "email_status": "valid", "mobile_phone": null, "first_name": "Dr. Finn", "last_name": "Majlergaard", "location": "Greater Nice Metropolitan Area", "position": "Founder and CEO", "years_in_position": 22, "years_in_company": 22, "months_in_position": 10, "sales_navigator_profile_url": "https://www.linkedin.com/sales/people/ACwAAAAFQjgBtNxy28alABzs_jj2meNVjFO0AUs,NAME_SEARCH,nwRo", "picture_url": "https://media.licdn.com/dms/image/v2/D4D03AQEwqlTdXSN6Rg/profile-displayphoto-shrink_800_800/B4DZQ7HXczHUAo-/0/1736158574857", "started_on": "2002-11-30 23:00:00+00", "industry": "Higher Education", "headline": "Author of: The Dangerous AI Gamble in Education. I/we help organisations develop winning company culture. I/we Gugin train leaders to become culturally and emotionally intelligent. Professor. Keynote speaker", "summary": "Founder and CEO @ Gugin | Creating Winning Corporate Cultures. I am the person you come to when your organisation is falling apart because of a toxic workplace culture.", "connections": 500, "linkedin_profile_url": "https://www.linkedin.com/in/ACwAAAAFQjgBtNxy28alABzs_jj2meNVjFO0AUs", "job_seeker": false, "open_to_work": false, "twitter_url": null, "person_id": "344632", "degree": "2nd", "company_industry": "Business Consulting and Services", "is_open": false, "is_saved": false, "is_premium": false, "match_filters": true, "no_match_reason": null, "seniority": "CXO, Senior", "recently_hired": false, "pending_invitation": false, "current_role_description": "Leading Gugin's mission to help organisations build winning, culturally intelligent workplace cultures.", "banner_url": "https://media.licdn.com/dms/image/v2/example-banner.jpg", "positions": [ { "position_id": "344632796142", "new": false, "current": true, "company_name": "Gugin - Creating Winning Corporate Cultures and culturally intelligent leaders", "company_id": "796142", "description": null, "location": "Nice, Provence-Alpes-Côte d'Azur, France", "title": "Founder and CEO", "started_on": "2002-12-01 00:00:00+00", "ended_on": null, "period": 22.83 } ], "education": [ { "education_id": "344632-edu-1", "school": "EAE Business School", "degree": "Doctor of Business Administration", "fields_of_study": "Business Administration", "started_on": "2005-01-01", "ended_on": "2010-01-01" } ], "websites": [ { "category": "COMPANY", "url": "https://gugin.com", "company_id": 796142 } ], "company": { "elapsed": 0.42, "formatted_revenue_amount": 1.0, "formatted_revenue_unit": "mil", "formatted_revenue_currency_code": "USD", "description": "Gugins core competence is to help companies around the world taking advantage of cultural diversity. 2/3 of all M&A's fail to meet their objectives due to cultural clashes.", "industry": "Business Consulting and Services", "employees_count": 14, "revenue_amount": 1000000, "revenue_currency_code": "USD", "flagship_url": "https://www.linkedin.com/company/gugin---delivering-cultural-intelligence/", "url": "https://www.linkedin.com/company/gugin---delivering-cultural-intelligence/", "domain": "gugin.com", "website": "https://gugin.com", "employees_count_range": "11-50", "hq_country": "France", "hq_geographical_area": "Provence-Alpes-Côte d'Azur", "hq_city": "Nice", "hq_postal_code": "06000", "hq_address": null, "name": "Gugin - Creating Winning Corporate Cultures and culturally intelligent leaders", "location": "Nice, Provence-Alpes-Côte d'Azur, France", "was_not_available": false, "is_detailed": true, "detailed_time": "2026-03-19T10:36:09.000Z", "last_scraping_time": "2026-03-19T10:36:09.000Z", "no_company_found": false, "no_employees_details": true }, "functions": null, "native_id": "21e281488adf43086782b731d9c19e0b" } ], "next": null, "previous": null } ``` `positions`, `education`, `websites`, and `company` are only populated when the squid has `get_profile_details` enabled. Without it, these come back as empty arrays / `null`. # Update Settings Source: https://docs.lobstr.io/examples/sales-navigator-leads-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure scraper settings for Sales Navigator Leads Scraper including email enrichment Configure your squid settings for the Sales Navigator Leads Scraper. This scraper supports email enrichment and requires linked Sales Navigator accounts. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **functions.email\_enrichment** | boolean | false | Enable email enrichment using lobstr.io's service (9 credits per profile where an email is found) | | **functions.mobile\_enrichment** | boolean | false | Enable mobile phone enrichment (300 credits per profile where a mobile number is found) | | **get\_profile\_details** | boolean | false | Fetch additional profile data: current role description and profile banner URL | | **profiles\_per\_page** | integer | 25 | Number of leads to scrape per page (max: 25) | | **max\_pages** | integer | 100 | Maximum number of pages to crawl (max: 100) | | **max\_results** | integer | — | Total leads to collect before stopping | | **max\_unique\_results\_per\_run** | integer | — | Maximum unique results across all tasks in the run | | **start\_page** | integer | — | Page number to start scraping from (useful for resuming or skipping already-collected pages) | | **skip\_collected\_leads** | boolean | false | Skip leads already present in your results database — useful for incremental runs | | **split\_search** | boolean | false | Split the search into smaller sub-searches to bypass Sales Navigator's 2,500-result cap. Use for broad searches that would otherwise be truncated. | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **accounts** | array | Array of linked Sales Navigator account hashes (required) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Enabling `functions.email_enrichment` incurs additional credit costs for email enrichment. Use multiple Sales Navigator accounts in the `accounts` array to increase throughput and avoid rate limits. Sales Navigator limits search results to 2,500 leads per search. Enable `split_search` to automatically break large searches into sub-searches and collect beyond this limit. **Backward compatibility:** The old function name `email` is still accepted but deprecated. Migrate to `email_enrichment`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Sales Navigator Leads Scraper (1)", "accounts": ["YOUR_SALES_NAV_ACCOUNT_HASH"], "no_line_breaks": true, "export_unique_results": true, "to_complete": false, "params": { "functions": { "email_enrichment": true }, "profiles_per_page": 25, "max_pages": 100, "max_results": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings with email enrichment and linked accounts payload = { "name": "Sales Navigator Leads Scraper (1)", "accounts": ["YOUR_SALES_NAV_ACCOUNT_HASH"], # Required: linked Sales Nav accounts "no_line_breaks": True, "export_unique_results": True, "to_complete": False, "params": { "functions": { "email_enrichment": True # Enable email enrichment (extra credits) }, "profiles_per_page": 25, # Max: 25 "max_pages": 100, # Max: 100 "max_results": None # null = no limit } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Sales Navigator Leads Scraper (1)", "no_line_breaks": true, "params": { "functions": { "email_enrichment": true }, "max_pages": 100, "max_results": null, "profiles_per_page": 25 }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/seloger-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add SeLoger search URLs to scrape real estate listings Add SeLoger search URLs to scrape French real estate listings. The scraper extracts property details including pricing, area, location, agency information, and energy ratings. Crawler ID: `78f5839ee4b97c30e67eec391b907dd0` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the SeLoger Search Export crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | SeLoger search URL (e.g., `https://www.seloger.com/list.htm?projects=2&places=...`) | Perform your search on SeLoger.com first, apply all filters (location, property type, price range), then copy the URL to preserve all parameters. SeLoger is a French real estate platform - URLs contain encoded location and filter parameters. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.seloger.com/list.htm?projects=2&places=%5B%7B%22subDivisions%22:%5B%2210%22%5D%7D%5D&mandatorycommodities=0&enterprise=1&qsVersion=1.0" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add SeLoger search URLs # Copy the URL directly from SeLoger after applying filters payload = { "squid": squid_id, "tasks": [ { "url": "https://www.seloger.com/list.htm?projects=2&places=%5B%7B%22subDivisions%22:%5B%2210%22%5D%7D%5D&mandatorycommodities=0&enterprise=1&qsVersion=1.0" } ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "fa0df9f38046ae68a04117ed96652005", "created_at": "2025-07-17T08:55:52.537282", "is_active": true, "params": { "url": "https://www.seloger.com/list.htm?projects=2&places=%5B%7B%22subDivisions%22:%5B%2210%22%5D%7D%5D&mandatorycommodities=0&enterprise=1&qsVersion=1.0" }, "module": 13, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/seloger-search-export/credit-cost Credit cost for the SeLoger Search Export | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 0.5 | 0.5 credit per listing. | | Get Annonce Details | 4 | 4 credit per listing. | # Get Results Source: https://docs.lobstr.io/examples/seloger-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from SeLoger Search Export Retrieve scraped data from your **SeLoger Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Full address of the property. Example: `Issy-les-Moulineaux` Whether the property is furnished. Example: `false` Name of the agency contact person. Example: `GEMALIA IMMOBILIER` Whether the agency has a listed email address. Example: `true` Unique identifier for the agency on SeLoger. Example: `440227` URL of the agency's logo or profile image. Example: `https://v.seloger.com/s/width/150/logos/0/z/x/0/0zx09bbylr0bhqsjhjdfui8t37znwvg2nyozrq5s6.jpg` URL to the agency's profile page on SeLoger. Example: `http://www.gemalia.fr/` URL to the agency's listings page on SeLoger. Example: `https://www.seloger.com/professionnels/agences-immobilieres/saint-maur-des-fosses-94100/agence-24353/` Phone number of the agency. Example: `06 08 16 60 22` Unique identifier for the listing on SeLoger. Example: `228317007` Living surface area of the property in square metres. Example: `85.0` Business unit or brand within the SeLoger group. Example: `1` Date and time this listing was scraped. Example: `20/03/2026 07:59` District or neighborhood of the property. Example: `Chemins des Vignes` Type of property (e.g. apartment, house, land). Example: `Appartement` Internal identifier for the property type. Example: `1` Whether the listing is an exclusive mandate on SeLoger. Example: `true` Whether the listing has expired on SeLoger. Example: `false` Monthly rental price (for rental listings). Example: `3056` Native SeLoger identifier for the listing. Example: `30440227` Nature or category of the real estate transaction. Example: `1` List of property photo URLs. Example: `https://v.seloger.com/s/crop/341x256/visuels/1/e/p/x/1epxz2k12bzzwgw41dwm9wwszojxzph451esiey4z.jpg, https://v.seloger.com/s/crop/341x256/visuels/1/j/1/c/1j1canrp4t6rva0z51irnohff9wuxwt23btnwq4pf.jpg, https://v.seloger.com/s/crop/341x256/visuels/0/b/8/f/0b8f3yzgk7hk3gu5kd2vfrb09fhlc0uixzoakxf0z.jpg, https://v.seloger.com/s/crop/341x256/visuels/1/5/z/1/15z1jdk5hdb1n3e1xszdylitifp5d2smcfa03f49b.jpg, https://v.seloger.com/s/crop/341x256/visuels/0/p/5/x/0p5xuawv6mwznffgf1gcx01wkwiowut9pvh10vpee.jpg` Total number of photos in the listing. Example: `33` Position of the listing in the search results French postal code of the property location. Example: `92130` Listed price of the property. Example: `600000` Price per square metre. Example: `7059` Additional pricing note or label (e.g. fees included) Unique publication identifier for the listing. Example: `30440227` Energy Performance Diagnostic (DPE) class of the property (A to G). Example: `E` Electricity consumption figure from the DPE. Example: `314` Greenhouse gas emissions (GES) class of the property (A to G). Example: `B` Gas emissions value from the GES diagnostic. Example: `10` Features and attributes of the property. Example: `Dispo le 30/04/2025, 2 terrasses, Jardin, Exposition Nord/Sud, Sans vis-à-vis, Calme, Belle vue, Cave, Interphone, Cuisine séparée, Salle de bain (baignoire), Salle d'eau (douche), Toilettes, Toilettes séparées, Salle à manger 15 m², Placards / rangements, Parquet, Chauffage : radiateur` Total number of rooms in the property. Example: `5` Short description or tagline of the listing on SeLoger. Example: `Appartement à vendre - Appartement/maison duplex 85m² rez de jardin avec 2 terrasses intérieures - face au jardin botanique - endroit très arboré - cuisine américaine avec salle à manger - salon - buanderie - salle de bain - bureau - wc au rez de chaussée - A l'étage suite parentale avec salle d'eau, une chambre et un espace jeu ou télé.` Tags or labels associated with the listing on SeLoger. Example: `5 pièces, 3 chambres, 85 m², Étage 0/3, Terrasse, Jardin` Type of transaction (sale or rental). Example: `2` Direct URL to the listing on SeLoger. Example: `https://www.seloger.com/annonces/achat/appartement/issy-les-moulineaux-92/chemins-des-vignes/228317007.htm` URL of the property video tour. Example: `https://youtu.be/_gBRTO5yrRc?si=drgHQqjmrzHiWJKZ` URL to the virtual visit or 3D tour of the property Latitude coordinate of the property. Example: `48.817728` Longitude coordinate of the property. Example: `2.255243` Annual co-ownership charges (charges de copropriété). Example: `2300` Number of lots in the co-ownership building. Example: `6` Whether the co-ownership has an ongoing legal syndic procedure. Example: `false` Additional property photos beyond the main listing photos. Example: `https://v.seloger.com/s/cdn/x/visuels/1/e/p/x/1epxz2k12bzzwgw41dwm9wwszojxzph451esiey4z.jpg, https://v.seloger.com/s/cdn/x/visuels/1/j/1/c/1j1canrp4t6rva0z51irnohff9wuxwt23btnwq4pf.jpg, https://v.seloger.com/s/cdn/x/visuels/0/b/8/f/0b8f3yzgk7hk3gu5kd2vfrb09fhlc0uixzoakxf0z.jpg, https://v.seloger.com/s/cdn/x/visuels/1/5/z/1/15z1jdk5hdb1n3e1xszdylitifp5d2smcfa03f49b.jpg, https://v.seloger.com/s/cdn/x/visuels/0/p/5/x/0p5xuawv6mwznffgf1gcx01wkwiowut9pvh10vpee.jpg` Title of the property listing on SeLoger. Example: `Vente Appartement 5 pièces Issy-les-Moulineaux - Appartement F5/T5/5 pièces 85 m²` Full description text of the listing on SeLoger. Example: `Appartement/maison duplex 85m² rez de jardin avec 2 terrasses intérieures - face au jardin botanique - endroit très arboré - cuisine américaine avec salle à manger - salon - buanderie - salle de bain - bureau - wc au rez de chaussée - A l'étage suite parentale (chambre avec salle d'eau) une chambre et un espace jeu ou télé - cagibis extérieurs - video disponible` Agency or seller reference number for the listing. Example: `5p issy les moulineaux jardin botanique` Number of bedrooms in the property. Example: `3` URL of the main listing photo. Example: `https://v.seloger.com/s/crop/414x414/visuels/1/e/p/x/1epxz2k12bzzwgw41dwm9wwszojxzph451esiey4z.jpg` French INSEE geographic code for the municipality Level of paid highlighting or promotion on SeLoger. Example: `1` Percentage by which the price has been reduced Whether the listing URL is redirected to another page Contact email address for the listing. Example: `true` Whether the seller is a private individual (not an agency). Example: `false` Legal company name of the listing agency (distinct from the contact person name). Example: `GEMALIA IMMOBILIER SARL` Agency SIRET registration number, extracted from legal information on SeLoger. Example: `89823412700016` Property sub-type classification. Example: `MULTI_STOREY`, `HOUSE_VILLA` Whether the listing is a new-build or newly listed property. Example: `false` Land/plot surface area in square metres (relevant for houses and land). Example: `312.0` Nearby public transport lines (metro and bus) closest to the property. Example: `M12, Bus 89` Whether the listing includes a brokerage fee (frais d'agence). Example: `true` Date and time the listing was first published on SeLoger. Example: `2026-03-15 09:00:00` Date and time the listing was last updated on SeLoger. Example: `2026-05-10 14:30:00` Street address of the agency office. Example: `12 Rue de la Paix` City where the agency office is located. Example: `Paris` Postal code of the agency office. Example: `75001` Average customer rating of the agency. Example: `4.8` Number of customer reviews for the agency. Example: `142` JSON array of photo objects, each with `url`, `classification` (AI scene label: LIVING\_ROOM, KITCHEN, BATHROOM, BEDROOM, BALCONY, EXTERIOR\_VIEW, EMPTY\_ROOM, HOME\_OFFICE, HALLWAY, COURTYARD, STAIRCASE, BUILDING\_FACADE, CLOSET, LOGO, YARD, TERRACE, GMAP, FLOORPLAN), and `alt` text Floorplan image URLs (separate from main photos), comma-separated Year the property was built. Example: `1972` Overall condition of the building. Values: `WELL_KEPT`, `MINT_CONDITION`, `NEED_OF_RENOVATION`, `FIRST_TIME_USE`, `REFURBISHED` Previous listed price before the most recent price reduction. Example: `450000` Whether the listing shows a precise street address (`true`) or city-level location only (`false`). Example: `true` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 71098, "object": "result", "squid": "e746e57a2f2970975260cef661a14982", "run": "e263a2fd9e3211e54f9e45bc32ab8e87", "address": "Issy-les-Moulineaux", "is_furnished": false, "agency_contact_name": "GEMALIA IMMOBILIER", "agency_has_email": true, "agency_id": 440227, "agency_img_url": "https://v.seloger.com/s/width/150/logos/0/z/x/0/0zx09bbylr0bhqsjhjdfui8t37znwvg2nyozrq5s6.jpg", "agency_link": "http://www.gemalia.fr/", "agency_page": "https://www.seloger.com/professionnels/agences-immobilieres/saint-maur-des-fosses-94100/agence-24353/", "agency_phone_number": "06 08 16 60 22", "annonce_id": 228317007, "area": 85.0, "business_unit": 1, "collected_at": "20/03/2026 07:59", "district": "Chemins des Vignes", "estate_type": "Appartement", "estate_type_id": 1, "is_exclusive": true, "is_expired": false, "monthly_price": 3056, "native_id": 71098, "nature": 1, "pictures": "https://v.seloger.com/s/crop/341x256/visuels/1/e/p/x/1epxz2k12bzzwgw41dwm9wwszojxzph451esiey4z.jpg, https://v.seloger.com/s/crop/341x256/visuels/1/j/1/c/1j1canrp4t6rva0z51irnohff9wuxwt23btnwq4pf.jpg, https://v.seloger.com/s/crop/341x256/visuels/0/b/8/f/0b8f3yzgk7hk3gu5kd2vfrb09fhlc0uixzoakxf0z.jpg, https://v.seloger.com/s/crop/341x256/visuels/1/5/z/1/15z1jdk5hdb1n3e1xszdylitifp5d2smcfa03f49b.jpg, https://v.seloger.com/s/crop/341x256/visuels/0/p/5/x/0p5xuawv6mwznffgf1gcx01wkwiowut9pvh10vpee.jpg", "picture_count": 33, "position": null, "postal_code": "92130", "price": 600000, "price_per_meter": 7059, "pricing_price_note": null, "publication_id": 30440227, "dpe": "E", "electricity_consumption": 314, "ges": "B", "gas_emissions": 10, "features": "Dispo le 30/04/2025, 2 terrasses, Jardin, Exposition Nord/Sud, Sans vis-à-vis, Calme, Belle vue, Cave, Interphone, Cuisine séparée, Salle de bain (baignoire), Salle d'eau (douche), Toilettes, Toilettes séparées, Salle à manger 15 m², Placards / rangements, Parquet, Chauffage : radiateur", "rooms": 5, "short_description": "Appartement à vendre - Appartement/maison duplex 85m² rez de jardin avec 2 terrasses intérieures - face au jardin botanique - endroit très arboré - cuisine américaine avec salle à manger - salon - buanderie - salle de bain - bureau - wc au rez de chaussée - A l'étage suite parentale avec salle d'eau, une chambre et un espace jeu ou télé.", "tags": "5 pièces, 3 chambres, 85 m², Étage 0/3, Terrasse, Jardin", "transaction_type": 2, "url": "https://www.seloger.com/annonces/achat/appartement/issy-les-moulineaux-92/chemins-des-vignes/228317007.htm", "video_url": "https://youtu.be/_gBRTO5yrRc?si=drgHQqjmrzHiWJKZ", "virtual_visit_url": null, "latitude": 48.817728, "longitude": 2.255243, "coownership_annual_charges": 2300, "coownership_number_of_lots": 6, "coownership_is_syndic_procedure": false, "additional_pictures": "https://v.seloger.com/s/cdn/x/visuels/1/e/p/x/1epxz2k12bzzwgw41dwm9wwszojxzph451esiey4z.jpg, https://v.seloger.com/s/cdn/x/visuels/1/j/1/c/1j1canrp4t6rva0z51irnohff9wuxwt23btnwq4pf.jpg, https://v.seloger.com/s/cdn/x/visuels/0/b/8/f/0b8f3yzgk7hk3gu5kd2vfrb09fhlc0uixzoakxf0z.jpg, https://v.seloger.com/s/cdn/x/visuels/1/5/z/1/15z1jdk5hdb1n3e1xszdylitifp5d2smcfa03f49b.jpg, https://v.seloger.com/s/cdn/x/visuels/0/p/5/x/0p5xuawv6mwznffgf1gcx01wkwiowut9pvh10vpee.jpg", "title": "Vente Appartement 5 pièces Issy-les-Moulineaux - Appartement F5/T5/5 pièces 85 m²", "description": "Appartement/maison duplex 85m² rez de jardin avec 2 terrasses intérieures - face au jardin botanique - endroit très arboré - cuisine américaine avec salle à manger - salon - buanderie - salle de bain - bureau - wc au rez de chaussée - A l'étage suite parentale (chambre avec salle d'eau) une chambre et un espace jeu ou télé - cagibis extérieurs - video disponible", "ref": "5p issy les moulineaux jardin botanique", "bedrooms_count": 3, "main_picture": "https://v.seloger.com/s/crop/414x414/visuels/1/e/p/x/1epxz2k12bzzwgw41dwm9wwszojxzph451esiey4z.jpg", "insee_code": null, "highlighting_level": 1, "price_decrease_percent": null, "is_redirected": null, "contact_email": true, "contact_is_private_seller": false, "agency_company_name": "BLG IMMOBILIER", "agency_siret": "88061178500028", "property_sub_type": "MULTI_STOREY", "is_new": false, "plot_surface": null, "transport": "Métro: 6, 8, 10 | Bus: 28, 80, 82", "has_brokerage_fee": false, "listing_creation_date": "2026-05-27T18:10:00", "listing_update_date": "2026-06-24T12:21:24", "agency_address": "7 avenue de l'Opéra, 75001 Paris", "agency_city": "Paris", "agency_zipcode": "75009", "agency_rating": 4.8, "agency_reviews": 77, "picture_classifications": "[{\"url\": \"https://mms.seloger.com/...\", \"classification\": \"LIVING_ROOM\", \"alt\": \"Appartement 3 pièces\"}, {\"url\": \"https://mms.seloger.com/...\", \"classification\": \"KITCHEN\", \"alt\": \"Appartement 3 pièces\"}]", "floorplan_pictures": "https://v.seloger.com/s/full/visuels/2/m/5/4/2m54abc123def456.jpg", "year_of_construction": 1975, "building_state": "WELL_KEPT", "previous_price": "378 000 €", "is_address_published": true, "functions": null } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/seloger-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure SeLoger Search Export scraper settings Configure your SeLoger Search Export squid settings. Control pagination and enable detail page enrichment to get full descriptions and geographic coordinates. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 400 | Maximum number of search result pages to crawl (max: 400) | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **functions.get\_annonce\_details** | boolean | false | Visit each listing's detail page to fetch full description, coordinates (lat/lng), and extra attributes (4 credits per listing) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Enable `functions.get_annonce_details` to get full property descriptions and exact GPS coordinates. Enabling `get_annonce_details` increases run time as each listing requires an additional HTTP request. Use `max_pages` to limit the scope of large searches and control credit usage. **Backward compatibility:** The old function name `annonce_details` is still accepted but deprecated. Migrate to `get_annonce_details`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "SeLoger Search Export (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "get_annonce_details": true }, "max_pages": 4 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings with detail page enrichment payload = { "name": "SeLoger Search Export (1)", "concurrency": 5, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "functions": { "get_annonce_details": True # Fetch full descriptions and coordinates }, "max_pages": 4 # Limit to 4 pages of results } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "SeLoger Search Export (1)", "concurrency": 5, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "functions": { "get_annonce_details": true }, "max_pages": 4 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/similarweb-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Similarweb Scraper squid Add domains or Similarweb URLs to your **Similarweb Scraper** squid. Crawler ID: `ac02527b552b088c1f4ebe5a41d3d40a` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields What to analyse. Four forms are accepted: * a bare domain: `github.com` * the website itself: `https://github.com/` * its Similarweb page: `https://www.similarweb.com/website/github.com/` * a Similarweb ranking: `https://www.similarweb.com/top-websites/france/news-and-media/` — every website of the ranking is collected, one row each. A ranking URL already carries its country and category: when it does, the `country` and `category` filters are ignored for that task. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "github.com"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "github.com"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "github.com"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/similarweb-scraper/credit-cost Credit cost for the Similarweb Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Websites | 1 | 1 credit per website. | | Company Details | 1 | 1 extra credit per website when `company_details` is enabled. | | AI Traffic | 1 | 1 extra credit per website when `ai_traffic` is enabled. | | Competitor Details | 1 | 1 extra credit per website when `competitor_details` is enabled. | # Get Results Source: https://docs.lobstr.io/examples/similarweb-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Similarweb Scraper Retrieve scraped data from your **Similarweb Scraper** runs. One row per website. Add-on fields are only populated when the matching add-on (`company_details`, `ai_traffic`, `competitor_details`) is enabled. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Websites Domain the row describes, as Similarweb indexes it. Example: `github.com` Similarweb page this row was collected from. UTC timestamp of the collection. Month Similarweb's snapshot covers. Similarweb publishes one snapshot per month. False when Similarweb tracks no traffic for this domain: the row is kept but every metric is empty. Website description as published by Similarweb. Similarweb category the website is ranked in. Favicon of the website. Desktop screenshot of the website. Mobile screenshot of the website. Worldwide traffic rank, all categories. Change of the global rank versus the previous month. Global rank of the previous month. Global rank of the last 3 months. Country the country rank refers to (the website's leading country). Traffic rank inside the leading country. Change of the country rank versus the previous month. Country rank of the previous month. Country rank of the last 3 months. Traffic rank inside the website's category. Change of the category rank versus the previous month. Category rank of the previous month. Category rank of the last 3 months. Estimated visits over the snapshot month. Change of the monthly visits versus the previous month. Share of visits that bounce, between 0 and 1. Average number of pages seen per visit. Average visit duration in seconds. Average visit duration as published (`HH:MM:SS`). 3-month traffic trend. Similarweb publishes it as a percentage of the chart scale, not as visit counts. Scale of the traffic chart Similarweb draws for this website. Example: `<1B` The 10 marketing channels with their ranking. Similarweb only discloses the share of the leading channel to logged-out callers: the other channels carry rank only and a null percentage. Share of search traffic that is organic. Share of search traffic that is paid. Number of keywords the website ranks on. 5 top keywords with their cost per click. Volume and estimated value are paywalled by Similarweb for logged-out callers and always come back empty. 5 countries sending the most traffic. Number of countries sending traffic to the website. Age brackets of the audience with their share. Share of male visitors. Share of female visitors. 5 social networks sending the most traffic. Number of social networks sending traffic. 6 websites sending the most referral traffic. Similarweb hides the domain of the top rows from logged-out callers (`is_locked`), the share is always given. Number of websites sending referral traffic. Categories the referral traffic comes from. 6 websites receiving the most outgoing traffic. Number of websites receiving outgoing traffic. Categories the outgoing traffic goes to. 5 websites sending the most display-ads traffic. Number of websites sending display-ads traffic. Number of ad networks used. Leading technology per technology category. Number of technologies detected on the website. Categories this audience is also interested in. Topics this audience is also interested in. Websites this audience also visits. 10 closest competitors with their affinity score. Company operating the website. Year the company was founded. Lower bound of the employee range. Upper bound of the employee range. Lower bound of the yearly revenue range. Upper bound of the yearly revenue range. Currency of the revenue range. City of the company headquarters. Country of the company headquarters. Similarweb internal code of the headquarters state. Category of the company. Parent domain of the company. True when the figures come from a Google Analytics account connected by the website owner. True when Similarweb flags the traffic data as invalid. ### Company Details Exact monthly visit counts of the last 3 months. Average visit duration of the last 3 months. Pages per visit of the last 3 months. Yearly revenue estimate per year. Private or public company. Public contact email of the company. Public phone number of the company. Twitter profile of the company. Facebook page of the company. LinkedIn page of the company. Stock tickers of the company when it is listed. Domains owned by the company. Dated company news Similarweb collects. Competing companies with their firmographics and total visits. ### AI Traffic Share of the website traffic referred by AI assistants. Visits referred by AI assistants over the month. The 7 AI assistants ranked by the traffic they send. Share of the AI referral traffic per assistant, in percent. Similarweb only values the top 3. 3-month history of the share per AI assistant. Scale of the AI traffic chart. ### Competitor Details The 10 closest competitors with their full metrics (description, screenshots, bounce rate, visit duration, pages per visit, global/country/category ranks and their monthly change, category, company name, affinity). ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"domain_name": "github.com", "source_url": "https://www.similarweb.com/website/github.com/", "snapshot_date": "2026-08-01T00:00:00+00:00", "description": "Join the world's most widely adopted, AI-powered developer platform", "category": "computers_electronics_and_technology/programming_and_developer_software", "global_rank": 50, "country_code": "US", "country_rank": 81, "visits": 649321442.0, "bounce_rate": 0.3665509655, "pages_per_visit": 5.767678566, "avg_visit_duration": 384}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/similarweb-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Similarweb Scraper settings Configure your **Similarweb Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | country | string | `worldwide` | Country of the ranking, used only when the task URL is the bare `https://www.similarweb.com/top-websites/` ranking. Ignored for a single website, and ignored when the ranking URL already names a country. Example values: `united-states`, `france`, `germany`. | | category | string | `all-categories` | Category of the ranking, used only when the task URL is the bare `top-websites` ranking. Ignored for a single website, and ignored when the ranking URL already names a category. Similarweb returns 50 websites for a country-only or category-only ranking, but only 5 when both are set. Example: `news-and-media`. | | max\_results | integer | 50 | Maximum number of websites collected per task. A single website is always one row, so this only matters on a ranking URL, where Similarweb serves at most 50 websites. | | company\_details | boolean | false | Add the company profile: exact monthly visit counts, revenue per year, company type, public email and phone, social profiles, subsidiaries, dated company news and competing companies with their firmographics. Costs 1 extra credit per website. | | ai\_traffic | boolean | false | Add the AI assistant traffic: share of the traffic referred by ChatGPT, Gemini, Claude, Perplexity, DeepSeek, Grok and Copilot, their ranking and their 3-month history. Costs 1 extra credit per website. | | competitor\_details | boolean | false | Add the full metrics of the 10 closest competitors: description, screenshots, bounce rate, visit duration, pages per visit, global/country/category ranks with their monthly change. Costs 1 extra credit per website. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "country": "france", "category": "news-and-media", "max_results": 50, "company_details": true, "ai_traffic": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "country": "france", "category": "news-and-media", "max_results": 50, "company_details": True, "ai_traffic": True, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"country": "france", "category": "news-and-media", "max_results": 50, "company_details": true, "ai_traffic": true}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/threads-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Threads Scraper squid Add URLs or inputs to your **Threads Scraper** squid. Crawler ID: `7308ae543e6abc70438d6b968d3a1b38` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Single post URL, profile URL, or a keyword/hashtag. Example: `https://www.threads.net/@zuck` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "7308ae543e6abc70438d6b968d3a1b38", "tasks": [ {"url": "https://www.threads.net/@zuck"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "7308ae543e6abc70438d6b968d3a1b38", "tasks": [ {"url": "https://www.threads.net/@zuck"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.threads.net/@zuck"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/threads-scraper/credit-cost Credit cost for the Threads Scraper 1 credit per result row. # Get Results Source: https://docs.lobstr.io/examples/threads-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Threads Scraper Retrieve scraped data from your **Threads Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Direct URL of the post. Example: `https://www.threads.net/@zuck/post/Cabcde12345` Numeric identifier of the post. Example: `3456789012345` Short code of the post used in its URL. Example: `Cabcde12345` Row type: post or reply. Example: `post` Where the row came from: posts, search, or permalink. Example: `posts` Keyword or tag searched for (search rows only). Example: `AI` UTC timestamp at which the row was collected. Example: `2026-09-15T10:00:00Z` Full text of the post. Example: `Just launched something new!` Publication date of the post in UTC. Example: `2026-09-14T20:00:00Z` Language detected by Threads for the post. Example: `en` Topic/community tag attached to the post. Example: `Technology` Hashtags found in the post text. Handles mentioned in the post text. Handles that Threads itself resolved as mentions. Accounts Threads resolved as mentions, with user ids. Number of likes. Example: `45231` Number of direct replies. Example: `1847` Number of reposts. Example: `3210` Number of quote posts. Example: `892` Number of shares. Example: `5612` Number of views (only on single-post crawls). Example: `1200000` True when the post carries at least one image, video, or carousel. Example: `false` Kind of media: text, image, video, carousel, or audio. Example: `text` URLs of the post media. Width in pixels of the post media. Example: `1080` Height in pixels of the post media. Example: `1080` True when the attached video carries audio. Example: `false` Alt text of the media. True when the post attaches a GIF. Example: `false` Title of the music track attached to the post. Artist of the music track. External links in the post. Title of the link preview attached to the post. True when the post is flagged as a paid partnership. Example: `false` True when the post is pinned. Example: `false` True when the post text was edited. Example: `false` True when the media is marked as a spoiler. Example: `false` True when Threads flags the post as AI-generated. Example: `false` Who is allowed to reply to the post. Example: `everyone` True when the post is a reply to another post. Example: `false` Handle of the account this post replies to. True when the post quotes another post. Example: `false` URL of the quoted post. True when the post is a repost. Example: `false` URL of the reposted post. Handle of the post author. Example: `zuck` Numeric identifier of the post author. Example: `314216` Display name of the post author. Example: `Mark Zuckerberg` URL of the post author profile. Example: `https://www.threads.net/@zuck` Profile picture of the post author. Example: `https://scontent.example.com/v/t51.2885-19/zuck_profile.jpg` True when the post author is verified. Example: `true` True when the post author account is private. Example: `false` Number of followers (profile crawls only). Example: `12500000` Biography of the crawled profile (profile crawls only). Links listed in the profile biography. Topic tags displayed on the profile. Highest resolution profile picture (profile crawls only). True when the profile is reachable on the fediverse. Example: `true` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=7308ae543e6abc70438d6b968d3a1b38" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "7308ae543e6abc70438d6b968d3a1b38", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"post_id": "3456789012345", "text_content": "Just launched something new!", "username": "zuck", "like_count": 45231, "reply_count": 1847, "published_at": "2026-09-14T20:00:00Z", "is_verified": true}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/threads-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Threads Scraper settings Configure your **Threads Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | sort | string | top | Ranking for keyword/tag searches: top (most relevant) or recent (newest first) | | include\_replies | boolean | false | Only applies to single post URLs — if true, also returns replies | | fetch\_since | string | — | Only collect posts published after this point | | fetch\_since\_timezone | string | — | Timezone for interpreting an absolute fetch\_since date | | max\_results | integer | — | Max posts per input | | max\_unique\_results\_per\_run | integer | — | Max unique posts across all inputs in the run | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/7308ae543e6abc70438d6b968d3a1b38 \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "sort": "recent", "include_replies": false, "max_results": 500 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/7308ae543e6abc70438d6b968d3a1b38", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sort": "recent", "include_replies": False, "max_results": 500, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"sort": "recent", "include_replies": false, "max_results": 500}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/tiktok-comments-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your TikTok Comments Scraper squid Add URLs or inputs to your **TikTok Comments Scraper** squid. Each task object must include the required fields below. Crawler ID: `5fc7b468267ec881344a11ac05c15a76` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/tiktok-comments-scraper/credit-cost Credit cost for the TikTok Comments Scraper 1 credit per comment # Get Results Source: https://docs.lobstr.io/examples/tiktok-comments-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TikTok Comments Scraper Retrieve scraped data from your **TikTok Comments Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the TikTok comment. Example: `sinzels` TikTok display name of the comment author. Example: `Sinzels` Full text content of the TikTok comment. Example: `UPDATE 2025; Bella Poarch: 69.9M Leah halton: 64M` Whether the comment contains an image or sticker. Example: `false` Number of likes the comment received. Example: `7418` Number of replies to this comment. Example: `91` Whether the video creator liked this comment. Example: `false` Whether the commenter is the video creator. Example: `false` Whether this is a reply to another comment. Example: `false` Whether the video creator replied to this comment. Example: `false` Date and time the comment was posted. Example: `2025-04-16T13:25:57Z` Unique TikTok identifier for the comment. Example: `7493901624780276486` Unique identifier for the TikTok video this comment belongs to. Example: `6862153058223197445` Username of the account this comment is replying to Identifier of the comment thread this reply belongs to Unique TikTok identifier of the comment author. Example: `7257306630806356997` Whether the comment is pinned to the top of the video. Example: `false` URL of the image or sticker attached to the comment URL of the comment author's TikTok profile picture. Example: `https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-avt-0068/6e61cfab75c399e7a58459442d607463~tplv-tiktokx-cropcenter:100:100.jpg?dr=10399&refresh_token=1aa12fef&x-expires=1774080000&x-signature=LM4Kos6ABLQMbiGzx6uR3FBKCPU%3D&t=4d5b0474&ps=13740610&shp=30310797&shcp=ff37627b&idc=no1a` URL of the TikTok video provided as scraper input. Example: `https://www.tiktok.com/@bellapoarch/video/6862153058223197445` Timestamp when the comment was scraped. Example: `2026-03-20T16:47:36Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 88365, "object": "result", "squid": "66ead021770793f40275dd07106c819b", "run": "dc4a5fa78da64f5c11c43082e257470e", "unique_id": "sinzels", "nickname": "Sinzels", "text": "UPDATE 2025;\nBella Poarch: 69.9M\nLeah halton: 64M", "has_image": false, "like_count": 7418, "reply_count": 91, "liked_by_author": false, "is_author": false, "is_reply": false, "replied_by_author": false, "created_at": "2025-04-16T13:25:57Z", "comment_id": "7493901624780276486", "video_id": "6862153058223197445", "reply_to": null, "thread_id": null, "user_id": "7257306630806356997", "is_pinned": false, "image": null, "avatar": "https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-avt-0068/6e61cfab75c399e7a58459442d607463~tplv-tiktokx-cropcenter:100:100.jpg?dr=10399&refresh_token=1aa12fef&x-expires=1774080000&x-signature=LM4Kos6ABLQMbiGzx6uR3FBKCPU%3D&t=4d5b0474&ps=13740610&shp=30310797&shcp=ff37627b&idc=no1a", "input_video_url": "https://www.tiktok.com/@bellapoarch/video/6862153058223197445", "scraping_time": "2026-03-20T16:47:36Z", "functions": null, "native_id": 88365 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/tiktok-comments-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the TikTok Comments Scraper settings Configure your TikTok Comments Scraper squid settings. Control the maximum number of comments and replies to collect per video. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_comments** | integer | unlimited | Maximum number of top-level comments to collect per video | | **max\_replies\_per\_comment** | integer | unlimited | Maximum number of replies to collect per comment | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Set `max_comments` to a reasonable limit (e.g., 500) for high-engagement videos to control credit usage. Setting `max_replies_per_comment` to 0 will collect only top-level comments without any replies. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "TikTok Comments Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_comments": 500, "max_replies_per_comment": 10 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "TikTok Comments Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_comments": 500, "max_replies_per_comment": 10 } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "TikTok Comments Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_comments": 500, "max_replies_per_comment": 10 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/tiktok-hashtag-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your TikTok Hashtag Scraper squid Add URLs or inputs to your **TikTok Hashtag Scraper** squid. Crawler ID: `dac422babfc7bf622b984646916e68f3` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields TikTok hashtag to scrape videos from, with or without the leading #. Example: `lobstr` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"hashtag": "lobstr"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"hashtag": "lobstr"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"hashtag": "lobstr"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/tiktok-hashtag-scraper/credit-cost Credit cost for the TikTok Hashtag Scraper 1 credit per video. # Get Results Source: https://docs.lobstr.io/examples/tiktok-hashtag-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TikTok Hashtag Scraper Retrieve scraped data from your **TikTok Hashtag Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields The hashtag this video was collected from (without the leading #). Example: `lobstr` Position of this video in the hashtag's video feed at scrape time. Example: `1` Unique TikTok video identifier. Example: `7680941891700935944` Caption or description of the TikTok video. Example: `GoPro POV: I found a party inside the lobster den #lobster #underwater #pov #party #higgsfield ` Detected language code of the video's caption. Example: `en` List of hashtags used in the video's own caption. Example: `["lobster", "underwater", "pov", "party", "higgsfield"]` List of TikTok accounts (@mentions) tagged in the video's caption. Example: `[]` Date and time the video was published. Example: `2026-09-02T12:17:29Z` Total number of times the video has been played. Example: `1500000` Total number of likes on the video. Example: `60900` Total number of comments on the video. Example: `662` Total number of times the video has been shared. Example: `23300` Total number of times the video has been saved to collections. Example: `4940` Total number of times the video has been reposted. Example: `0` Duration of the video in seconds. Example: `12` Width of the video in pixels. Example: `576` Height of the video in pixels. Example: `1024` Video resolution definition (e.g. 540p, 720p, 1080p). Example: `540p` Container format of the video file. Example: `mp4` Video bitrate in bits per second. Example: `641117` File size of the video in bytes. Example: `988443` Whether the video is a paid advertisement. Example: `False` Whether the author has enabled duets for this video. Example: `True` Whether the author has enabled stitches for this video. Example: `True` ISO country code of where the video was created. Canonical TikTok video page URL. Unlike play\_url/download\_url (signed CDN links tied to the proxy IP that fetched them, and unusable elsewhere), this always works. Example: `https://www.tiktok.com/@kennyslowbird/video/7680941891700935944` Direct streaming URL for the video. Signed and tied to the proxy IP that fetched it -- confirmed to 403 from any other network, even with full browser TLS impersonation. Use video\_url for a link guaranteed to keep working. Example: `https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/osPMAPFpquB5whsYB2iigfBnEmARMIREIyfDUC/?a=1988&bti=ODszNWYuMDE6&&bt=626&ft=-Csk_m.MPD12NpP3Jn-Uxl7FSY3W3wv25ycAp&mime_type=video_mp4&rc=NmQ6Mzk5ODNkZDs7ZGk7N0BpajRqNnA5cm01ZDMzODczNEBiLjIxX19eNl4xLl40YmIwYSNoNHFtMmRzc2BhLS1kMTFzcw%3D%3D&expire=1788988144&l=202609072108521145CE1BA5A6675D4565&ply_type=2&policy=2&signature=3a1dd0cf1932bd6dffda58177499342f&tk=tt_chain_token&btag=e000b0000` Direct download URL for the video. Same IP-binding limitation as play\_url -- use video\_url for a link guaranteed to keep working. URL of the video thumbnail (cover image). Example: `https://p19-common-sign.tiktokcdn-eu.com/tos-alisg-p-0037/ocGMEGfYAbdQDHfqSLQLI8HYQFfesTwwcAGXRI~tplv-tiktokx-origin.image?dr=10395&x-expires=1788987600&x-signature=o7cWRDAV2XzbPvIXQ%2FcYS24BwIc%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=no1a` URL of the animated dynamic cover (GIF-like preview). Example: `https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-p-0037/o4QwQEGJGXYYAyGqILEReDTfS8bRfIjAQHLfF2~tplv-tiktokx-origin.image?dr=10395&x-expires=1788987600&x-signature=mzIZiNAQrJvIOm40dm1XaHHQpvU%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=no1a` Unique identifier of the music track used in the video. Example: `7639424214639167489` Title of the music track used in the video. Example: `Movin' To The Sun` Artist name of the music track used in the video. Example: `HUGEL & Imael Angel & Ultra Naté` Direct URL to stream the audio track. Example: `https://sf16-music.tiktokcdn-eu.com/obj/tos-alisg-ve-2774/owYPQBSopi5XcEAa58MUvAixnPAWIp93tiLnr` URL of the music track's cover art. Example: `https://p77-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/oYmBAs9EvpUPMEAiAHxSsYrqAWiBAmAQCawAV.jpeg` Duration of the music track in seconds. Example: `48` Whether the audio is an original sound created by the author. Example: `False` Whether the music track is under copyright protection. Example: `False` Unique numeric identifier of the video author. Example: `6829825193482929158` Secondary unique identifier of the author (used in API calls). Example: `MS4wLjABAAAAzeLkt1OZZGvXNE4urbCiOvdjecJhZuPMjTzCM_RZYVnW9gG0AiIOEQiv7u75lmX0` TikTok username (handle) of the video author. Example: `kennyslowbird` Display name of the video author. Example: `Kenny` Whether the author's account is verified by TikTok. Example: `False` Whether the author's account is set to private. Example: `False` Biography or description on the author's TikTok profile Example: `⬆️ 2.7 million across all platforms 🔥Music Release & Collabs & partnerships🔥 📩 kennyslowbird@gmail.com 📩 🔥 Higgsfield Partner 🔥 ⬇️ buy my secret ⬇️` Number of followers the author has. Example: `1700000` Number of accounts the author is following. Example: `381` Total likes received by the author across all their videos. Example: `67900000` Total number of videos published by the author. Example: `1893` Total number of likes the author has given to other videos. Example: `2209` Number of mutual followers (friends) the author has. Example: `0` URL of the author's profile picture. Example: `https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/a0d2d60a3d45a05ea7d2220c875cba22~tplv-tiktokx-cropcenter:100:100.jpeg?dr=10399&refresh_token=3b6951e9&x-expires=1788987600&x-signature=MP2LVGgC8j02XYhQROa%2BKDQ00HE%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a` List of visual effects/stickers applied to the video. Example: `[{"id": "1911622141", "name": "IPHONE EVENING CAPTURE", "use_count": 0}, {"id": "127702155", "name": "comfy", "use_count": 0}]` Date and time when this video was scraped. Example: `2026-09-07T21:09:20.934Z` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"hashtag": "lobstr", "hashtag_rank": 1, "video_id": "7680941891700935944", "description": "GoPro POV: I found a party inside the lobster den #lobster #underwater #pov #party #higgsfield ", "text_language": "en", "hashtags": ["lobster", "underwater", "pov", "party", "higgsfield"], "mentions": [], "created_at": "2026-09-02T12:17:29Z", "play_count": 1500000, "like_count": 60900}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/tiktok-hashtag-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure TikTok Hashtag Scraper settings Configure your **TikTok Hashtag Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | max\_unique\_results\_per\_run | int | — | Maximum number of unique videos retrieved across all tasks in the entire run. Leave empty for unlimited. | | max\_results | integer | — | Optional cap on the number of videos retrieved per hashtag. TikTok's own hashtag feed practically maxes out around 400-800 videos. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_results": 500, "max_unique_results_per_run": 2000 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_results": 500, "max_unique_results_per_run": 2000, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"max_results": 500, "max_unique_results_per_run": 2000}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/tiktok-profile-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your TikTok Profile Scraper squid Add URLs or inputs to your **TikTok Profile Scraper** squid. Crawler ID: `089d76c66c2fd5c57d7ce7338d9ae7de` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields TikTok profile URL or handle. Example: `https://www.tiktok.com/@mrbeast` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "089d76c66c2fd5c57d7ce7338d9ae7de", "tasks": [ {"url": "https://www.tiktok.com/@mrbeast"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "089d76c66c2fd5c57d7ce7338d9ae7de", "tasks": [ {"url": "https://www.tiktok.com/@mrbeast"} ] } ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.tiktok.com/@mrbeast"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/tiktok-profile-scraper/credit-cost Credit cost for the TikTok Profile Scraper 1 credit per video. With `profile_only: true`, 1 credit for the profile row. # Get Results Source: https://docs.lobstr.io/examples/tiktok-profile-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TikTok Profile Scraper Retrieve scraped data from your **TikTok Profile Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Position of this video in the profile's feed at scrape time Unique TikTok video identifier. Example: `7123456789012345678` Caption of the TikTok video. Example: `Crazy experiment gone wrong!` Detected language code of the caption Hashtags in the caption @-mentions in the caption Date and time the video was published (UTC). Example: `2026-09-12T18:00:00Z` Total number of plays. Example: `45000000` Total number of likes. Example: `3200000` Total number of comments Total number of shares Total number of saves to collection Total number of reposts Duration of the video in seconds Width of the video in pixels Height of the video in pixels Video resolution. Example: `1080p` Container format of the video file Video bitrate in bits per second File size in bytes Whether the video is a paid advertisement True when the post is a photo slideshow Ordered list of image URLs when is\_slideshow is true Whether the author has enabled duets Whether the author has enabled stitches ISO country code of where the video was created Canonical TikTok video page URL Direct streaming URL (signed, tied to the proxy) Direct download URL (signed, tied to the proxy) URL of the video thumbnail Original unprocessed cover image URL URL of the animated dynamic cover Subtitle/caption tracks available for the video Visual effects/stickers applied to the video Unique identifier of the music track Title of the music track Artist name of the music track Direct URL to stream the audio track URL of the music track's cover art Duration of the music track in seconds Whether the audio is an original sound Whether the music track is under copyright TikTok numeric user id of the profile TikTok secUid of the profile Profile handle (uniqueId), lowercase, without @. Example: `mrbeast` Display name of the profile Profile bio External link in the profile bio Profile picture URL Whether the profile carries TikTok's verified badge Whether the profile is private Number of followers. Example: `200000000` Number of accounts followed Total likes received by the profile Number of videos on the profile Number of mutual follows Number of likes the profile has given Whether flagged as commerce account Whether profile is a TikTok Shop seller Whether flagged as organization account Id of the profile's live room Date and time the TikTok account was created Profile's interface language code Canonical TikTok profile URL The profile URL or handle given as task input Date and time when this row was scraped ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"video_id": "7123456789012345678", "description": "Crazy experiment gone wrong!", "play_count": 45000000, "like_count": 3200000, "author_username": "mrbeast", "author_follower_count": 200000000, "created_at": "2026-09-12T18:00:00Z"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/tiktok-profile-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure TikTok Profile Scraper settings Configure your **TikTok Profile Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | rows | integer | — | Number of rows returned per API page | | profile\_only | boolean | false | Collect only the account's profile stats as a single row, without videos | | max\_unique\_results\_per\_run | integer | — | Max unique videos across all tasks in the run | | max\_results | integer | — | Cap on the number of videos per profile | | fetch\_since | string | — | Stop scraping when videos older than this threshold are reached | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/089d76c66c2fd5c57d7ce7338d9ae7de \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_results": 100, "fetch_since": "30d" }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/089d76c66c2fd5c57d7ce7338d9ae7de", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_results": 100, "fetch_since": "30d" } ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"profile_only": false, "max_results": 100, "fetch_since": "30d"}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/tiktok-top-ads-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add keyword search tasks to extract top ads from TikTok Add keyword-based search tasks to your squid. The scraper will extract top performing ads from TikTok's Creative Center based on your search terms. Crawler ID: `b5079ede3002655d286a03ad29604ac6` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the tiktok-top-ads-scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `keyword` field | ## Task Fields | Field | Type | Required | Description | | - | - | - | - | | **keyword** | string | Yes | Search term you want to get TikTok Ads from (e.g., "fitness", "skincare", "cooking") | Use specific keywords related to your industry or niche for more relevant ad results. You can add multiple keywords in a single request to analyze ads across different topics. Results are retrieved from TikTok's Creative Center Top Ads library. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/api/v2/squid/YOUR_SQUID_ID/task" \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "keyword": "fitness" }' ``` ```python Python theme={null} import requests API_TOKEN = "YOUR_API_TOKEN" SQUID_ID = "YOUR_SQUID_ID" url = f"https://api.lobstr.io/api/v2/squid/{SQUID_ID}/task" headers = { "Authorization": f"Token {API_TOKEN}", "Content-Type": "application/json" } data = { "keyword": "fitness" } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## Response ```json 200 theme={null} { "id": "task_abc123", "squid_id": "YOUR_SQUID_ID", "status": "pending", "keyword": "fitness", "created_at": "2024-01-15T10:30:00Z" } ``` # Credit Cost Source: https://docs.lobstr.io/examples/tiktok-top-ads-scraper/credit-cost Credit cost for the TikTok Top Ads Scraper 1 credit per ad. # Get Results Source: https://docs.lobstr.io/examples/tiktok-top-ads-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TikTok Top Ads Scraper Retrieve scraped data from your **TikTok Top Ads Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique TikTok internal identifier for the ad. Example: `7183244447446040577` Direct URL to the ad listing in TikTok Ads Library. Example: `https://ads.tiktok.com/business/creativecenter/topads/7183244447446040577` Title or headline of the TikTok advertisement. Example: `Omg Top War is SOOO fun!!` Name of the brand running the ad. Example: `Top War: Battle Game` Relative cost or spend level indicator of the ad. Example: `2` Click-through rate (CTR) of the ad. Example: `0.16` Whether the ad is bookmarked in TikTok Ads Library. Example: `false` Internal key for the ad's industry category. Example: `label_25310000000` Industry category the ad belongs to. Example: `Strategy` Whether this ad was returned via a search in TikTok Ads Library. Example: `false` Number of likes the ad video received. Example: `1316378` Internal key for the campaign objective. Example: `campaign_objective_app_install` Campaign objective (e.g. App Installs, Traffic, Conversions). Example: `App Installs` Category tag assigned to the ad in TikTok Ads Library. Example: `3` Internal TikTok identifier for the ad video. Example: `v0911dg40001cen4er3c77ubsnsedsp0` Duration of the ad video in seconds. Example: `34.368` URL of the ad video's thumbnail image. Example: `https://p16-sign-va.tiktokcdn.com/tos-maliva-v-2c3654-us/486619c74ee8418fba7fa56e4ca774ad~tplv-noop.image?dr=18692&refresh_token=9e8e25b8&x-expires=1769020412&x-signature=jNdfeXCC98Xb3JPjqjh0CiqPEtg%3D&t=9276707c&ps=14f1eb3e&shp=9e36835a&shcp=317596d8&idc=my` URL of the ad video file at 720p resolution. Example: `https://v16m-default.tiktokcdn.com/9afb882c10114d99b9b0186102ce930a/69711bfc/video/tos/maliva/tos-maliva-v-2c3654-us/oskBSNsbfKpj8BEvQdTk1m5nQDdRJ2gflHrcIa/?a=0&bti=NTU4QDM1NGA%3D&ch=0&cr=0&dr=0&lr=tiktok_business&cd=0%7C0%7C0%7C0&cv=1&br=4390&bt=2195&cs=0&ds=3&ft=cApXJCz7ThWHcWX01GZmo0P&mime_type=video_mp4&qs=0&rc=OjNlOmc6Njg5OTQ0Njs7Z0BpM3ZocWU6ZnU3aDQzN2c0M0AyLzNgL18yNTExMzZgL2JgYSNtYXBwcjQwYmtgLS1kLjZzcw%3D%3D&vvpl=1&l=202601212032587548419764747B268087&btag=e00088000` URL of the ad video file at 540p resolution. Example: `https://v16m-default.tiktokcdn.com/0d3b90a85935bd1edad867f6de9bf21f/69711bfc/video/tos/maliva/tos-maliva-v-2c3654-us/ooRHdsQQJXE8kDkmfn15vrbfVdnDBBNINgSjlK/?a=0&bti=NTU4QDM1NGA%3D&ch=0&cr=0&dr=0&lr=tiktok_business&cd=0%7C0%7C0%7C0&cv=1&br=3180&bt=1590&cs=0&ds=6&ft=cApXJCz7ThWHcWX01GZmo0P&mime_type=video_mp4&qs=0&rc=NTY1ZWY2aTs4NTVoZWk8O0BpM3ZocWU6ZnU3aDQzN2c0M0A2Nl9iYWNfNWAxLy1gMy8wYSNtYXBwcjQwYmtgLS1kLjZzcw%3D%3D&vvpl=1&l=202601212032587548419764747B268087&btag=e00088000` Width of the ad video in pixels. Example: `720` Height of the ad video in pixels. Example: `1280` Keywords associated with the ad in TikTok Ads Library URL of the landing page the ad directs users to Number of times the ad video was shared Platform where the ad is served (e.g. TikTok) Number of comments on the ad video ISO 2-letter country code of the ad's target region Whether the ad has a summary section in TikTok Ads Library Highlight or badge label shown on the ad in TikTok Ads Library List of campaign objectives associated with the ad Creative pattern label categorizing the ad's visual format Internal key identifying the ad source Whether the ad video includes a voice-over track Raw detail data returned by the TikTok Ads Library API ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 22424, "object": "result", "squid": "382c3dfe84f18e2deb860db2ffea7f63", "run": "74e47042fb999e9edafb0f7a003c3795", "internal_id": "7183244447446040577", "url": "https://ads.tiktok.com/business/creativecenter/topads/7183244447446040577", "ad_title": "Omg Top War is SOOO fun!!", "brand_name": "Top War: Battle Game", "cost": 2, "ctr": 0.16, "favorite": false, "industry_key": "label_25310000000", "industry": "Strategy", "is_search": false, "like": 1316378, "objective_key": "campaign_objective_app_install", "objective": "App Installs", "tag": 3, "video_info_vid": "v0911dg40001cen4er3c77ubsnsedsp0", "video_info_duration": 34.368, "video_info_cover": "https://p16-sign-va.tiktokcdn.com/tos-maliva-v-2c3654-us/486619c74ee8418fba7fa56e4ca774ad~tplv-noop.image?dr=18692&refresh_token=9e8e25b8&x-expires=1769020412&x-signature=jNdfeXCC98Xb3JPjqjh0CiqPEtg%3D&t=9276707c&ps=14f1eb3e&shp=9e36835a&shcp=317596d8&idc=my", "video_info_video_url_720p": "https://v16m-default.tiktokcdn.com/9afb882c10114d99b9b0186102ce930a/69711bfc/video/tos/maliva/tos-maliva-v-2c3654-us/oskBSNsbfKpj8BEvQdTk1m5nQDdRJ2gflHrcIa/?a=0&bti=NTU4QDM1NGA%3D&ch=0&cr=0&dr=0&lr=tiktok_business&cd=0%7C0%7C0%7C0&cv=1&br=4390&bt=2195&cs=0&ds=3&ft=cApXJCz7ThWHcWX01GZmo0P&mime_type=video_mp4&qs=0&rc=OjNlOmc6Njg5OTQ0Njs7Z0BpM3ZocWU6ZnU3aDQzN2c0M0AyLzNgL18yNTExMzZgL2JgYSNtYXBwcjQwYmtgLS1kLjZzcw%3D%3D&vvpl=1&l=202601212032587548419764747B268087&btag=e00088000", "video_info_video_url_540p": "https://v16m-default.tiktokcdn.com/0d3b90a85935bd1edad867f6de9bf21f/69711bfc/video/tos/maliva/tos-maliva-v-2c3654-us/ooRHdsQQJXE8kDkmfn15vrbfVdnDBBNINgSjlK/?a=0&bti=NTU4QDM1NGA%3D&ch=0&cr=0&dr=0&lr=tiktok_business&cd=0%7C0%7C0%7C0&cv=1&br=3180&bt=1590&cs=0&ds=6&ft=cApXJCz7ThWHcWX01GZmo0P&mime_type=video_mp4&qs=0&rc=NTY1ZWY2aTs4NTVoZWk8O0BpM3ZocWU6ZnU3aDQzN2c0M0A2Nl9iYWNfNWAxLy1gMy8wYSNtYXBwcjQwYmtgLS1kLjZzcw%3D%3D&vvpl=1&l=202601212032587548419764747B268087&btag=e00088000", "video_info_width": 720, "video_info_height": 1280, "keywords": null, "landing_page": null, "share": null, "source": null, "comment": null, "country_code": null, "has_summary": null, "highlight_text": null, "objectives": null, "pattern_label": null, "source_key": null, "voice_over": null, "detail_raw": null, "functions": null, "native_id": 22424 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/tiktok-top-ads-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the TikTok Top Ads Scraper parameters Configure the scraper parameters to control how TikTok ads are filtered and sorted. These settings determine region, industry, objective, and other filtering criteria. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **region** | string | World | Specify a predetermined region for your search (e.g., `United States`, `France`, `Germany`) | | **industry** | string | All industries | Filter by industry (e.g., `Beauty & Personal Care`, `Games`, `E-Commerce (Non-app)`) | | **objective** | string | All objectives | Campaign objective filter: `Conversions`, `Lead Generation`, `Traffic`, `Video Views`, etc. | | **like** | string | All likes | Filter by engagement percentile: `Top 1~20%`, `Top 21~40%`, etc. | | **time\_range** | string | Last 7 days | Ad publication period: `Last 7 days`, `Last 30 days`, `Last 180 days` | | **sort\_by** | string | For You | Sorting option: `For You`, `Reach`, `CTY`, `2s Views Rate`, `6s Views Rate` | | **functions.ad\_details** | boolean | false | Fetch full ad details including landing page URL and additional metadata (1 credit per ad) | ## Available Regions World, Argentina, Australia, Austria, Bahrain, Belarus, Belgium, Brazil, Cambodia, Canada, Chile, Colombia, Czechia, Denmark, Ecuador, Egypt, Finland, France, Germany, Greece, Hungary, Indonesia, Iraq, Ireland, Israel, Italy, Japan, Jordan, Kazakhstan, Kuwait, Lebanon, Malaysia, Mexico, Morocco, Netherlands, New Zealand, Norway, Oman, Pakistan, Peru, Philippines, Poland, Portugal, Qatar, Romania, Saudi Arabia, Singapore, South Africa, South Korea, Spain, Sweden, Switzerland, Taiwan, Thailand, Turkey, United Arab Emirates, United Kingdom, United States, Uruguay, Vietnam ## Available Industries All industries, App Installs, Apparel & Accessories, Appliances, Apps, Baby, Kids & Maternity, Beauty & Personal Care, Business Services, E-Commerce (Non-app), Education, Financial Services, Food & Beverage, Games, Health, Home Improvement, Household Products, Life Services, News & Entertainment, Pets, Sports & Outdoor, Tech & Electronics, Travel, Vehicle & Transportation Use `sort_by: Reach` to find ads with the highest audience reach for competitive analysis. Filter by `like: Top 1~20%` to see only the most engaging ads. Combining industry and objective filters helps narrow down ads most relevant to your use case. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "TikTok Top Ads Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "region": "United States", "industry": "Beauty & Personal Care", "objective": "Conversions", "like": "Top 1~20%", "time_range": "Last 30 days", "sort_by": "Reach", "functions": { "ad_details": false } } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "TikTok Top Ads Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "region": "United States", "industry": "Beauty & Personal Care", "objective": "Conversions", "like": "Top 1~20%", "time_range": "Last 30 days", "sort_by": "Reach", "functions": { "ad_details": False # Enable for full ad details (1 credit per ad) } } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "TikTok Top Ads Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "region": "United States", "industry": "Beauty & Personal Care", "objective": "Conversions", "like": "Top 1~20%", "time_range": "Last 30 days", "sort_by": "Reach", "functions": { "ad_details": false } } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/tiktok-video-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your TikTok Video Scraper squid Add URLs or inputs to your **TikTok Video Scraper** squid. Each task object must include the required fields below. Crawler ID: `1e6cba50f2713539a2b0ac784184ed92` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields Full TikTok video URL to scrape. Example: `https://www.tiktok.com/@bellapoarch/video/6862153058223197445` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.tiktok.com/@bellapoarch/video/6862153058223197445" }, { "url": "https://www.tiktok.com/@username/video/7234567890123456789" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_hash, "tasks": [ {"url": "https://www.tiktok.com/@bellapoarch/video/6862153058223197445"}, {"url": "https://www.tiktok.com/@username/video/7234567890123456789"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") for task in data["tasks"]: print(f" {task['id']}: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2025-06-24T11:11:30.222467", "is_active": true, "params": { "url": "https://www.tiktok.com/@bellapoarch/video/6862153058223197445" }, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/tiktok-video-scraper/credit-cost Credit cost for the TikTok Video Scraper 1 credit per video # Get Results Source: https://docs.lobstr.io/examples/tiktok-video-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TikTok Video Scraper Retrieve scraped data from your **TikTok Video Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from. Hash of a specific run (optional). Page number (default: 1). Results per page (default: 50, max: 100). ## Result Fields Unique TikTok identifier for the video. Example: `6862153058223197445` Caption/description text of the video. ISO 8601 timestamp of when the video was published. Example: `2020-08-17T12:34:56Z` Total number of plays/views. Example: `52300000` Total number of likes. Example: `3100000` Total number of comments. Example: `45000` Number of times the video was shared. Example: `120000` Number of times the video was saved/collected. Example: `870000` Number of reposts. Example: `0` Video duration in seconds. Example: `15` Video width in pixels. Example: `576` Video height in pixels. Example: `1024` Video quality definition. Example: `540p` Video bitrate. Example: `1243660` File size in bytes. Example: `2330107` Whether the video is an advertisement. Example: `false` Whether duets are enabled for this video. Example: `true` Whether stitches are enabled for this video. Example: `true` Country code where the video was created. Example: `US` URL to stream the video. URL to download the video. URL of the video thumbnail/cover image. URL of the animated cover image. Unique identifier for the music track used. Example: `6862153058223197445` Title of the music track. Example: `M to the B` Artist name of the music track. Example: `Millie B` URL to play the music track. Duration of the music track in seconds. Example: `60` Whether the audio is the creator's original sound. Example: `false` Whether the music track is copyrighted. Example: `true` Unique TikTok user ID of the video author. Example: `6569595380449902597` Secondary unique identifier for the author's account. TikTok username (handle) of the author. Example: `bellapoarch` Display name of the author. Example: `Bella Poarch` Whether the author's account is verified. Example: `true` Bio/description from the author's profile. Number of followers the author has. Example: `92800000` Number of accounts the author follows. Example: `728` Total likes received across all the author's videos. Example: `2200000000` Total number of videos published by the author. Example: `421` URL of the author's profile picture. Whether this result is a related video (not directly from a task URL). Example: `false` The video ID of the task that triggered this related result. Only set when `is_related` is `true`. The original task URL that produced this result. ISO 8601 timestamp of when this result was scraped. ## Code Examples ```bash cURL theme={null} curl -X GET "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=1&page_size=50" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} params = { "squid": "YOUR_SQUID_HASH", "page": 1, "page_size": 50 } all_results = [] url = f"{BASE_URL}/results" while True: response = requests.get(url, headers=headers, params=params) data = response.json() all_results.extend(data["data"]) print(f"Fetched page {data['page']} of {data['total_pages']}") if data["next"] is None: break url = data["next"] params = {} print(f"\nTotal videos collected: {len(all_results)}") for video in all_results[:5]: print(f"- @{video.get('author_username')}: {video.get('description', '')[:60]} ({video.get('play_count', 0):,} plays)") ``` ## Response ```json 200 theme={null} { "total_results": 2, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 2, "data": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "object": "result", "squid": "YOUR_SQUID_HASH", "run": "RUN_HASH", "video_id": "6862153058223197445", "description": "😛✌️ #fyp #foryou #foryoupage", "created_at": "2020-08-17T12:34:56Z", "play_count": 52300000, "like_count": 3100000, "comment_count": 45000, "share_count": 120000, "collect_count": 870000, "repost_count": 0, "duration": 15, "width": 576, "height": 1024, "definition": "540p", "is_ad": false, "duet_enabled": true, "stitch_enabled": true, "location_created": "US", "music_title": "M to the B", "music_author": "Millie B", "music_original": false, "music_is_copyrighted": true, "author_username": "bellapoarch", "author_nickname": "Bella Poarch", "author_verified": true, "author_follower_count": 92800000, "is_related": false, "related_to_video_id": null, "input_video_url": "https://www.tiktok.com/@bellapoarch/video/6862153058223197445", "scraping_time": "2026-03-20T09:15:00.000Z" } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/tiktok-video-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure settings for your TikTok Video Scraper squid Update the configuration of your **TikTok Video Scraper** squid. Pass crawler-specific settings inside the `params` object. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Crawler-specific settings. See fields below. ## Settings Fields Number of related videos to also scrape for each task URL. Leave empty or set to `0` to disable. Example: `5` Set `max_related_videos_per_post` to expand your dataset — for each input URL, the scraper will also collect that many related videos. Results from related videos have `is_related: true` and include a `related_to_video_id` field. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "TikTok Video Scraper", "params": { "max_related_videos_per_post": 5 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={ "name": "TikTok Video Scraper", "params": { "max_related_videos_per_post": 5 } } ) data = response.json() print(f"Squid updated: {data['name']}") print(f"Related videos per post: {data['params'].get('max_related_videos_per_post')}") ``` ## Response ```json 201 theme={null} { "id": "YOUR_SQUID_HASH", "name": "TikTok Video Scraper", "crawler": { "id": "1e6cba50f2713539a2b0ac784184ed92", "name": "TikTok Video Scraper", "slug": "tiktok-video-scraper" }, "params": { "max_related_videos_per_post": 5 }, "concurrency": 5, "export_unique_results": true, "to_complete": true, "no_line_breaks": false, "status": "idle", "created_at": "2025-01-20T10:15:00.000000", "updated_at": "2025-01-27T14:35:00.000000" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/tripadvisor-details-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your TripAdvisor Restaurant Details Scraper squid Add TripAdvisor restaurant URLs to your **TripAdvisor Restaurant Details Scraper** squid. Crawler ID: `be5fc6c070c94f1606c99c2f1f488033` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields URL of a TripAdvisor restaurant page. Supported TripAdvisor domains: `.com`, `.fr`, `.co.uk`, `.it`, `.de`, `.es`, `.ca`, `.in`, `.jp`. For the fastest runs, group URLs that share the same TripAdvisor domain (all `.com` together, all `.fr` together, …) in the same squid: each switch between domains forces a new anti-bot challenge and slows the run down. Ranking details (city, position) are richest on `.com` URLs. Example: `https://www.tripadvisor.com/Restaurant_Review-g187175-d806529-Reviews-Michel_Sarran-Toulouse_Haute_Garonne_Occitanie.html` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.tripadvisor.com/Restaurant_Review-g187175-d806529-Reviews-Michel_Sarran-Toulouse_Haute_Garonne_Occitanie.html"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.tripadvisor.com/Restaurant_Review-g187175-d806529-Reviews-Michel_Sarran-Toulouse_Haute_Garonne_Occitanie.html"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.tripadvisor.com/Restaurant_Review-g187175-d806529-Reviews-Michel_Sarran-Toulouse_Haute_Garonne_Occitanie.html"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/tripadvisor-details-scraper/credit-cost Credit cost for the TripAdvisor Restaurant Details Scraper 1 credit per restaurant row. # Get Results Source: https://docs.lobstr.io/examples/tripadvisor-details-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TripAdvisor Restaurant Details Scraper Retrieve scraped data from your **TripAdvisor Restaurant Details Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Details TripAdvisor URL of the restaurant. When the same restaurant is submitted on several TripAdvisor domains, the first URL collected is kept. Example: `https://www.tripadvisor.com/Restaurant_Review-g187175-d806529-Reviews-Michel_Sarran-Toulouse_Haute_Garonne_Occitanie.html` TripAdvisor internal identifier of the restaurant, identical on every TripAdvisor domain. One row per `place_id`. Example: `806529` Name of the restaurant as listed on TripAdvisor. Example: `Michel Sarran` Whether TripAdvisor flags the restaurant as permanently closed. Example: `false` Position of the restaurant in its city ranking. Empty when the listing is closed or delisted. Example: `13` Total number of restaurants the city ranking is computed against. Example: `1996` City the ranking refers to. Example: `Toulouse` Raw ranking sentence as displayed by TripAdvisor. Empty when the listing is closed or delisted. Example: `#13 of 1,996 Restaurants in Toulouse` Average TripAdvisor rating out of 5. Example: `4.7` Total number of reviews on TripAdvisor. Example: `1636` Number of 1-star reviews. Example: `4` Number of 2-star reviews. Example: `19` Number of 3-star reviews. Example: `90` Number of 4-star reviews. Example: `196` Number of 5-star reviews. Example: `1327` Aggregate food sub-rating out of 5. `0` means the dimension has never been rated. Example: `4.75` Aggregate service sub-rating out of 5. `0` means the dimension has never been rated. Example: `4.72` Aggregate value-for-money sub-rating out of 5. `0` means the dimension has never been rated. Example: `4.35` Aggregate atmosphere sub-rating out of 5. `0` means the dimension has never been rated. Example: `4.37` TripAdvisor Travelers' Choice award code for the active year (e.g. `COE`, `BOTB`). Empty when the restaurant has no award. Example: `COE` Year of the Travelers' Choice award. Empty when the restaurant has no award. Example: `2026` Whether the restaurant carries a MICHELIN Guide award on its TripAdvisor page. Example: `true` Number of MICHELIN stars. Empty for a MICHELIN distinction that is not a star (e.g. Bib Gourmand). Example: `1` Year of the MICHELIN award. Example: `2026` Cuisine types listed on TripAdvisor. Example: `["French", "European", "Healthy"]` Price range indicator. Example: `$$$$` Full formatted address of the restaurant. Example: `21 Boulevard Armand Duportal, 31000, Toulouse France` Contact phone number of the restaurant. Example: `+33 5 61 12 32 32` Contact email address published by the restaurant on TripAdvisor. Empty when the restaurant has not published one. Example: `contact@michel-sarran.com` Official website URL of the restaurant. Example: `http://www.michel-sarran.com` Latitude coordinate of the restaurant. Example: `43.607277` Longitude coordinate of the restaurant. Example: `1.434596` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"url": "https://www.tripadvisor.com/Restaurant_Review-g187175-d806529-Reviews-Michel_Sarran-Toulouse_Haute_Garonne_Occitanie.html", "place_id": 806529, "name": "Michel Sarran", "is_closed": false, "ranking_rank": 13, "ranking_denominator": 1996, "ranking_city": "Toulouse", "ranking_text": "#13 of 1,996 Restaurants in Toulouse", "overall_rating": 4.7, "review_count": 1636, "rating_count_1": 4, "rating_count_2": 19, "rating_count_3": 90, "rating_count_4": 196, "rating_count_5": 1327, "subrating_food": 4.75, "subrating_service": 4.72, "subrating_value": 4.35, "subrating_atmosphere": 4.37, "travelers_choice_award_type": "COE", "travelers_choice_year": 2026, "is_michelin": true, "michelin_stars": 1, "michelin_year": 2026, "cuisines": ["French", "European", "Healthy"], "price_range": "$$$$", "address": "21 Boulevard Armand Duportal, 31000, Toulouse France", "phone": "+33 5 61 12 32 32", "email": "contact@michel-sarran.com", "website": "http://www.michel-sarran.com", "lat": 43.607277, "lng": 1.434596}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/tripadvisor-details-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure TripAdvisor Restaurant Details Scraper settings Configure your **TripAdvisor Restaurant Details Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | max\_results | integer | — | Maximum number of results to collect per task. One task returns one restaurant, so this is only useful to cap a run. Leave empty for unlimited. | | max\_unique\_results\_per\_run | integer | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_unique_results_per_run": 1000 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_unique_results_per_run": 1000, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"max_unique_results_per_run": 1000}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/tripadvisor-restaurants-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add TripAdvisor restaurant search URLs as tasks for scraping restaurant listings Add TripAdvisor restaurant search URLs to your squid for scraping restaurant listings. The scraper extracts restaurant details including ratings, reviews, contact information, price ranges, location coordinates, and Michelin status from TripAdvisor's restaurant directory. Crawler ID: `f781435f026b36b19ef74d591a077cb7` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Task Format Each task should contain a URL from a TripAdvisor restaurant search results page. Search for restaurants by location on TripAdvisor, then use those search URLs as tasks. ## Supported URL Formats The scraper supports TripAdvisor restaurant search URLs from various regional domains: Apply filters on TripAdvisor (cuisine type, price range, ratings) before copying the URL to get more targeted restaurant results. TripAdvisor uses location IDs (g-codes) in URLs. Each city or region has a unique g-code that you can find by searching on the website. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.tripadvisor.fr/Restaurants-g187147-Paris_Ile_de_France.html" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add TripAdvisor restaurant search URLs as tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.tripadvisor.fr/Restaurants-g187147-Paris_Ile_de_France.html"}, {"url": "https://www.tripadvisor.com/Restaurants-g60763-New_York_City_New_York.html"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") for task in data["tasks"]: print(f" Task ID: {task['id']}") print(f" URL: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.tripadvisor.fr/Restaurants-g187147-Paris_Ile_de_France.html" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/tripadvisor-restaurants-search-export/credit-cost Credit cost for the TripAdvisor Restaurants Search Export 1 credit per restaurant. # Get Results Source: https://docs.lobstr.io/examples/tripadvisor-restaurants-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TripAdvisor Restaurants Search Export Retrieve scraped data from your **TripAdvisor Restaurants Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the restaurant listing on TripAdvisor. Example: `https://www.tripadvisor.fr/Restaurant_Review-g187147-d12182791-Reviews-Restaurant_La_Pie_Noir-Paris_Ile_de_France.html` Unique internal identifier for the restaurant on TripAdvisor. Example: `d12182791` Name of the restaurant as listed on TripAdvisor. Example: `Restaurant La Pie Noir` Average TripAdvisor rating out of 5. Example: `4.7` Total number of customer reviews on TripAdvisor. Example: `665` Price range indicator (e.g. \$, \$\$, \$\$\$). Example: `€€-€€€` Cuisine types and dining features listed on TripAdvisor. Example: `Française, Européenne` Full formatted address of the restaurant. Example: `5 Rue de la Montagne Sainte Genevieve, Paris, Île-de-France, 75005, FR` Latitude coordinate of the restaurant. Example: `48.849335` Longitude coordinate of the restaurant. Example: `2.34875` Contact phone number of the restaurant. Example: `+33 1 43 54 08 99` Official website URL of the restaurant URL to the restaurant's menu on TripAdvisor or its website Email address of the restaurant. Example: `restaurant.lapienoir.bzh@gmail.com` URL of the restaurant's main cover image on TripAdvisor. Example: `https://dynamic-media-cdn.tripadvisor.com/media/photo-o/19/7a/08/cf/side-view-from-the-street.jpg` Whether the restaurant has claimed its TripAdvisor listing. Example: `false` Whether the restaurant appears in the Michelin Guide. Example: `false` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 30880, "object": "result", "squid": "ca2852c60196302c6e4c1e18001a204b", "run": "93284ed660634fd6d188365ce304cf35", "url": "https://www.tripadvisor.fr/Restaurant_Review-g187147-d12182791-Reviews-Restaurant_La_Pie_Noir-Paris_Ile_de_France.html", "internal_id": "d12182791", "name": "Restaurant La Pie Noir", "score": 4.7, "ratings": 665, "price": "€€-€€€", "features": "Française, Européenne", "full_address": "5 Rue de la Montagne Sainte Genevieve, Paris, Île-de-France, 75005, FR", "lat": 48.849335, "lng": 2.34875, "phone": "+33 1 43 54 08 99", "website": null, "menu": null, "mail": "restaurant.lapienoir.bzh@gmail.com", "image_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/19/7a/08/cf/side-view-from-the-street.jpg", "is_claimed": false, "is_michelin": false, "functions": null, "native_id": 30880 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/tripadvisor-restaurants-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the TripAdvisor Restaurants Scraper parameters and options Configure your TripAdvisor Restaurants Scraper squid settings to control the maximum number of restaurants to scrape per search. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of restaurants to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Start with a smaller max\_results value (e.g., 50) to test your search before scaling up for larger data collection. TripAdvisor results include both claimed and unclaimed business profiles. Claimed profiles tend to have more complete information. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "TripAdvisor Restaurants Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 100 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "TripAdvisor Restaurants Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 100 } } ) data = response.json() print(f"Squid updated: {data['name']}") print(f"Max results: {data['params']['max_results']}") ``` ## Response ```json 201 theme={null} { "name": "TripAdvisor Restaurants Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 100 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/tripadvisor-reviews-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add TripAdvisor place URLs as tasks to scrape reviews from hotels, restaurants, and attractions Add TripAdvisor place URLs to your squid for scraping reviews. The scraper extracts comprehensive review data including ratings, review text, user information, travel dates, photos, subratings, owner responses, and more from hotels, restaurants, and attractions on TripAdvisor. Crawler ID: `83970312f2402accbb3553b326a2c8eb` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Task Format Each task should contain a URL from a TripAdvisor place page. You can scrape reviews from hotels, restaurants, or attractions. ## Supported URL Formats The scraper supports TripAdvisor review URLs from various regional domains: Use the scraper's filter settings (language, rating, fetch\_since) to collect only the reviews you need and reduce credit consumption. Each place type (hotel, restaurant, attraction) has its own URL format on TripAdvisor. Make sure to use the review page URL, not the overview page. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add TripAdvisor place URLs as tasks response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html"}, {"url": "https://www.tripadvisor.com/Hotel_Review-g60763-d120461-Reviews-The_Knickerbocker-New_York_City_New_York.html"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") for task in data["tasks"]: print(f" Task ID: {task['id']}") print(f" URL: {task['params']['url']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a7d9f45e3b2c8e1f7d6a8b9c4e5f7a9b", "created_at": "2025-01-27T14:30:00.123456", "is_active": true, "params": { "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" }, "module": 132, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/tripadvisor-reviews-scraper/credit-cost Credit cost for the TripAdvisor Reviews Scraper 1 credit per review # Get Results Source: https://docs.lobstr.io/examples/tripadvisor-reviews-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from TripAdvisor Reviews Scraper Retrieve scraped data from your **TripAdvisor Reviews Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Review identifier. Example: `1052053091` Direct URL to the review on TripAdvisor. Example: `https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1052053091-Hilton_New_York_Times_Square-New_York_City_New_York.html` Title or headline of the review. Example: `Excellent hotel` Rating score. Example: `5` Travel or visit date. Example: `2026-02` Publication date. Example: `2026-03-05` Creation date. Example: `2026-03-05` Text content. Example: \`Hotel with excellent location, perfectly connected by metro and therefore ideal for getting around the city easily. The rooms are clean, tidy and very comfortable, with a really breathtaking view. The breakfast is rich and of great quality, with a wide choice of both continental products and English breakfast, all nice and well presented. Special thanks go to the breakfast staff, Ciro and Francisco, who stood out for their professionalism, kindness and friendliness. They made the experience even more enjoyable, showing great attention to me and my friends. Thank you very much to Ciro and Francisco!\` Type of trip (solo, family, business, couple). Example: `FRIENDS` Number of helpful votes. Example: `0` Platform where content was published. Example: `MOBILE` Reviewer's tip about the room Language code. Example: `en` Original language. Example: `it` Current status of the review on TripAdvisor. Example: `PUBLISHED` Detailed sub-category ratings List of photo URLs List of photo IDs attached to the review Type of translation applied to the review content. Example: `MACHINE` Machine translation provider identifier. Example: `10` Name of the product or experience being reviewed. Example: `Hilton New York Times Square` Unique identifier of the reviewer on TripAdvisor. Example: `49137FAFD99CA18EC8122D6D5E16D5B1` Full name of the reviewer. Example: `Giovanni` Username/handle of the reviewer on TripAdvisor. Example: `GiovanniMaro` Whether user is verified. Example: `false` User's stated location. Example: `Sicily, Italy` User location identifier. Example: `187886` User location name. Example: `Sicily` Total number of contributions (reviews, photos) by the reviewer. Example: `4` Number of helpful votes received by the reviewer. Example: `0` Identifier of the reviewer's avatar image. Example: `452386603` Available sizes for the reviewer's avatar photo. Example: `[{'url': 'https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/df/2b/default-avatar-2020-39.jpg', 'width': 1200, 'height': 1200}]` URL to the reviewer's TripAdvisor profile. Example: `https://www.tripadvisor.com/Profile/GiovanniMaro` Unique identifier of the business owner's response. Example: `1052223597` Text of the business owner's reply to the review. Example: `Dear Giovanni, It was a pleasure having you stay with us, and we're delighted to hear that your visit left such a positive impression. Our location in the heart of the area makes exploring the city easy, and it's wonderful to know our accommodations provided the comfort, cleanliness, and memorable views that helped make your stay special. We're also glad you enjoyed starting your day with our breakfast, and your kind recognition of Ciro and Francisco will mean so much to them. Their professionalism, warmth, and attentive service reflect the hospitality we strive to provide every day. Thank you for choosing to stay with us and for taking a moment to share your experience. We would love the opportunity to welcome you back to Hilton Times Square whenever your travels bring you this way again.` Language of owner's response. Example: `en` Date the business owner's response was published. Example: `2026-03-07` Name or identifier of the person who responded on behalf of the business. Example: `Front Desk` Owner's connection type to the listing. Example: `General Manager` Place identifier. Example: `208453` Place name. Example: `Hilton New York Times Square` Type of place. Example: `ACCOMMODATION` Category of the reviewed place (e.g. restaurant, hotel). Example: `HOTEL` Total number of reviews for the reviewed place. Example: `8935` TripAdvisor URL of the reviewed place. Example: `https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html` Alert or notification status. Example: `false` Timestamp when the review was scraped. Example: `2026-03-21T20:39:38Z` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 82832, "object": "result", "squid": "8022c63552775d4b1f2e07e05e3387e4", "run": "f027c59d81e7a2954f7a6bd9b1c7c0b3", "review_id": "1052053091", "url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1052053091-Hilton_New_York_Times_Square-New_York_City_New_York.html", "title": "Excellent hotel", "rating": 5, "travel_date": "2026-02", "published_date": "2026-03-05", "created_date": "2026-03-05", "text": "Hotel with excellent location, perfectly connected by metro and therefore ideal for getting around the city easily. The rooms are clean, tidy and very comfortable, with a really breathtaking view.\n\nThe breakfast is rich and of great quality, with a wide choice of both continental products and English breakfast, all nice and well presented.\n\nSpecial thanks go to the breakfast staff, Ciro and Francisco, who stood out for their professionalism, kindness and friendliness. They made the experience even more enjoyable, showing great attention to me and my friends.\n\nThank you very much to Ciro and Francisco!", "trip_type": "FRIENDS", "helpful_votes": 0, "publish_platform": "MOBILE", "room_tip": null, "lang": "en", "original_language": "it", "status": "PUBLISHED", "subratings": null, "photos": null, "photo_ids": null, "translation_type": "MACHINE", "mt_provider_id": 10, "product_name": "Hilton New York Times Square", "user_id": "49137FAFD99CA18EC8122D6D5E16D5B1", "user_name": "Giovanni", "username": "GiovanniMaro", "is_user_verified": false, "user_location": "Sicily, Italy", "user_location_id": 187886, "user_location_name": "Sicily", "user_total_contributions": 4, "user_helpful_votes": 0, "user_avatar_id": "452386603", "user_avatar_photo_sizes": [ { "url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/df/2b/default-avatar-2020-39.jpg", "width": 1200, "height": 1200 } ], "user_profile_link": "https://www.tripadvisor.com/Profile/GiovanniMaro", "owner_response_id": "1052223597", "owner_response_text": "Dear Giovanni,\nIt was a pleasure having you stay with us, and we're delighted to hear that your visit left such a positive impression. Our location in the heart of the area makes exploring the city easy, and it's wonderful to know our accommodations provided the comfort, cleanliness, and memorable views that helped make your stay special. We're also glad you enjoyed starting your day with our breakfast, and your kind recognition of Ciro and Francisco will mean so much to them. Their professionalism, warmth, and attentive service reflect the hospitality we strive to provide every day. Thank you for choosing to stay with us and for taking a moment to share your experience. We would love the opportunity to welcome you back to Hilton Times Square whenever your travels bring you this way again.", "owner_response_lang": "en", "owner_response_published_date": "2026-03-07", "responder": "Front Desk", "owner_connection_to_subject": "General Manager", "place_id": "208453", "place_name": "Hilton New York Times Square", "place_type": "ACCOMMODATION", "place_category": "HOTEL", "place_total_reviews": 8935, "place_web_url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html", "alert_status": false, "scraping_time": "2026-03-21T20:39:38Z", "functions": null, "native_id": 82832 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/tripadvisor-reviews-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the TripAdvisor Reviews Scraper parameters including filters for language, ratings, and date range Configure your TripAdvisor Reviews Scraper squid settings to control review collection limits and apply filters by language, rating, and recency. These settings help you target specific review types and optimize credit usage. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of reviews to collect per listing | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique reviews across all tasks in the run | | **language** | string | All languages | Filter reviews by language (e.g., `English`, `French`, `German`) | | **ratings** | string | All ratings | Filter by star rating: `1`, `2`, `3`, `4`, `5` | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## General Settings Standard squid settings that apply to all scrapers: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use the language and ratings filters to collect only high-quality reviews in your target language, reducing noise and credit consumption. Set `fetch_since` to `null` for all reviews, or use a relative duration (`"24h"`, `"7d"`, `"2w"`) or absolute date (`"YYYY-MM-DD HH:MM"`) to collect only recent reviews. When using an absolute date, set `fetch_since_timezone` to interpret it in the correct timezone (e.g. `"Europe/Paris"`). Reviews include subratings (Value, Rooms, Location, Cleanliness, Service, Sleep Quality) for hotels, providing detailed insights beyond the overall rating. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "TripAdvisor Reviews - NYC Hotels", "params": { "max_results": 100, "language": "English", "ratings": "5", "fetch_since": null, "fetch_since_timezone": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_hash = "YOUR_SQUID_HASH" # Update TripAdvisor Reviews Scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_hash}", headers=headers, json={ "name": "TripAdvisor Reviews - NYC Hotels", "params": { "max_results": 100, "language": "English", "ratings": "5", "fetch_since": None, # relative: "7d", absolute: "2026-01-01 00:00:00" "fetch_since_timezone": None # e.g. "Europe/Paris" — only used with absolute fetch_since } } ) data = response.json() print(f"Squid updated: {data['name']}") print(f"Max results per task: {data['params']['max_results']}") print(f"Language filter: {data['params']['language']}") print(f"Rating filter: {data['params']['ratings']}") ``` ## Response ```json 201 theme={null} { "id": "c7ea965333d54a949a9e74ba62029098", "name": "TripAdvisor Reviews - NYC Hotels", "crawler": { "id": 132, "name": "TripAdvisor Reviews Scraper", "slug": "tripadvisor-reviews-scraper" }, "params": { "max_results": 100, "language": "English", "ratings": "5", "fetch_since": null, "fetch_since_timezone": null }, "concurrency": 5, "export_unique_results": true, "to_complete": true, "no_line_breaks": false, "status": "idle", "created_at": "2025-01-20T10:15:00.000000", "updated_at": "2025-01-27T14:35:00.000000" } ``` # Add Tasks Source: https://docs.lobstr.io/examples/trustpilot-reviews-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Trustpilot Reviews Scraper squid Add URLs or inputs to your **Trustpilot Reviews Scraper** squid. Each task object must include the required fields below. Crawler ID: `b3362ab52c6fab3d8897af79cbba380e` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/trustpilot-reviews-scraper/credit-cost Credit cost for the Trustpilot Reviews Scraper 1 credit per review. # Get Results Source: https://docs.lobstr.io/examples/trustpilot-reviews-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Trustpilot Reviews Scraper Retrieve scraped data from your **Trustpilot Reviews Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the review on Trustpilot. Example: `69bf54852955c39180813cb8` Display name of the reviewer. Example: `Kockey` Unique identifier of the reviewer on Trustpilot. Example: `5dfce3a5b14ccfc746f29fc9` URL of the reviewer's profile picture. Example: `https://user-images.trustpilot.com/5dfce3a5b14ccfc746f29fc9/73x73.png` Date the review was published. Example: `2026-03-22T04:31:33.000Z` Title or headline of the review. Example: `I was so impressed with the service…` Full text content of the review. Example: `I was so impressed with the service read the reviews 10 times and they were correct this process was easy with fast approval and funding my credit cards payments were sent in 2 days and balance in my account in 2 days. I was so impressed that I even open a checking account with lending club. I'm thankful that they didn't play games when they said approved in just a few minutes they meant it they didn't change their mind are lie approved meant just that no hoops to jump through. I'm so thankful and will definitely be a long term customer. Customer service was great and very informative I'm just blown away with how smooth everything went thank you lending club you guys rock` Language the review was written in. Example: `en` Star rating given by the reviewer (1 to 5). Example: `5` Level of verification applied to the review. Example: `not-verified` Total number of reviews the author has written. Example: `7` Country code of the reviewer. Example: `US` Date of the experience being reviewed. Example: `2026-03-18T00:00:00.000Z` Number of likes the review has received. Example: `0` Number of times the review has been reported Source or platform where the review originated. Example: `Organic` Whether the reviewer's identity has been verified. Example: `false` Whether the review has been verified by Trustpilot. Example: `false` Response text from the business owner Date the business owner replied to the review Date the review was last updated Number of reviews the author has left for this domain. Example: `1` Total number of reviews for the business. Example: `11194` Trustpilot TrustScore of the business. Example: `4.7` Star rating category of the business (e.g. Excellent, Great). Example: `4.5` Timestamp when the review was scraped. Example: `2026-03-22T12:57:40Z` Direct URL to the individual review on Trustpilot. Example: `https://www.trustpilot.com/reviews/abc123` Trustpilot business unit ID of the company. Example: `4ba4e3da0000640005039fdc` How the review was verified (e.g. `automatic`, `invitation`). Example: `automatic` Sentiment of the review text as classified by Trustpilot AI: `positive`, `neutral`, or `negative`. Example: `positive` Date the company reply was last updated. Example: `2026-03-10T08:00:00Z` Name of the company being reviewed. Example: `Amazon` Primary Trustpilot category of the company. Example: `Electronics & Technology` Trustpilot page URL for the company. Example: `https://www.trustpilot.com/review/amazon.com` Page number where this review was found during scraping. Example: `1` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 37238, "object": "result", "squid": "522ecc754ef9810e4a46b59119a2c883", "run": "6afbc55c2c99e8f06baaabee716c8ef3", "review_url": "69bf54852955c39180813cb8", "author_name": "Kockey", "author_id": "5dfce3a5b14ccfc746f29fc9", "author_image": "https://user-images.trustpilot.com/5dfce3a5b14ccfc746f29fc9/73x73.png", "date_published": "2026-03-22T04:31:33.000Z", "review_headline": "I was so impressed with the service…", "review_body": "I was so impressed with the service read the reviews 10 times and they were correct this process was easy with fast approval and funding my credit cards payments were sent in 2 days and balance in my account in 2 days. I was so impressed that I even open a checking account with lending club. I'm thankful that they didn't play games when they said approved in just a few minutes they meant it they didn't change their mind are lie approved meant just that no hoops to jump through. I'm so thankful and will definitely be a long term customer. Customer service was great and very informative I'm just blown away with how smooth everything went thank you lending club you guys rock", "review_language": "en", "rating_value": 5, "verification_level": "not-verified", "number_of_reviews": 7, "consumer_country_code": "US", "experience_date": "2026-03-18T00:00:00.000Z", "likes": 0, "report": null, "review_source": "Organic", "is_author_verified": false, "is_review_verified": false, "owner_reply": null, "owner_reply_date": null, "updated_date": null, "consumer_reviews_on_domain": 1, "reviews_count": 11194, "trust_score": 4.7, "stars": 4.5, "scraping_time": "2026-03-22T12:57:40Z", "review_link": null, "business_unit_id": null, "review_verification_source": null, "review_sentiment": null, "owner_reply_updated_date": null, "company_name": null, "company_category": null, "company_page_url": null, "page_number": null, "functions": null, "native_id": 37238 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/trustpilot-reviews-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Trustpilot Reviews Scraper settings Configure your Trustpilot Reviews Scraper squid settings. Filter by star rating, language, date, and more to target specific review types. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | 200 | Maximum number of reviews to collect per company page | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique reviews across all tasks in the run | | **stars** | string | all | Filter by star rating: `all`, `1`, `2`, `3`, `4`, `5` | | **language** | string | All languages | Filter by review language. Allowed values: `All languages`, `Arabic`, `Chinese (Simplified)`, `Chinese (Traditional)`, `Danish`, `Dutch`, `English`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Indonesian`, `Italian`, `Japanese`, `Korean`, `Norwegian`, `Polish`, `Portuguese`, `Russian`, `Spanish`, `Swedish`, `Thai`, `Turkish`, `Vietnamese` | | **verified** | boolean | false | Only return reviews from verified purchases | | **replies** | boolean | false | Include company replies in the results | | **search** | string | null | Filter reviews by keyword | | **topics** | string | null | Filter by Trustpilot topic tag | | **start\_page** | integer | 1 | Page number to start scraping from | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `stars: 1` combined with `fetch_since: 7d` to monitor recent negative reviews for reputation management. Set `verified: true` to focus on reviews from confirmed customers only. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Trustpilot Reviews Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 200, "stars": "all", "language": "English", "verified": false, "replies": false, "fetch_since": null } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Trustpilot Reviews Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 200, "stars": "all", "language": "English", "verified": False, "replies": False, "fetch_since": None } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Trustpilot Reviews Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 200, "stars": "all", "language": "English", "verified": false, "replies": false, "fetch_since": null } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/twitter-followers-following-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Twitter Followers & Following Scraper squid Add URLs or inputs to your **Twitter Followers & Following Scraper** squid. Each task object must include the required fields below. Crawler ID: `8c6eed231ba0378c42efbe391f70d6d8` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. Each task supports the fields below. ## Task Fields # Credit Cost Source: https://docs.lobstr.io/examples/twitter-followers-following-scraper/credit-cost Credit cost for the Twitter Followers & Following Scraper 1 credit per profile # Get Results Source: https://docs.lobstr.io/examples/twitter-followers-following-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Twitter Followers & Following Scraper Retrieve scraped data from your **Twitter Followers & Following Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier combining user\_id and relationship\_type. Example: `769922298715537408_following` Unique Twitter/X identifier for the account. Example: `769922298715537408` Display name of the Twitter/X account. Example: `Elon Musk` Twitter/X handle of the account (without the @ symbol). Example: `elonmusk` Direct URL to the Twitter/X profile. Example: `https://x.com/elonmusk` Profile bio/description text. Example: `Tech entrepreneur` Location shown on the Twitter/X profile. Example: `San Francisco, CA` Website URL linked on the Twitter/X profile. Example: `https://example.com` Total number of followers of this Twitter/X account. Example: `180000000` Total number of accounts this profile follows. Example: `500` Total number of tweets/posts published by this account. Example: `50000` Total number of media items (photos and videos) posted by this account. Example: `1200` Total number of tweets this account has liked. Example: `30000` Number of public Twitter/X lists this account is included in. Example: `5000` Date the Twitter/X account was created. Example: `2016-08-24T10:00:00+00:00` URL of the account's profile picture. Example: `https://pbs.twimg.com/profile_images/12345/photo_normal.jpg` URL of the account's profile banner/header image. Example: `https://pbs.twimg.com/profile_banners/12345/1234567890` Whether the account has a Twitter Blue (X Premium) verified checkmark. Example: `false` Whether the account has a legacy verified checkmark. Example: `false` Whether the account's tweets are protected (private). Example: `false` Whether the account's content is flagged as possibly sensitive. Example: `false` Shape of the profile image displayed on Twitter/X (e.g. Circle, Square). Example: `Circle` Professional account type (e.g. Creator, Business). Example: `Creator` Professional category label shown on the profile. Example: `Author` Whether this user is a 'follower' or 'following' of the scraped account. Example: `following` Raw JSON user data returned by the Twitter/X API ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 55956, "object": "result", "squid": "8f10fa2b9b3429006afaecebd572624f", "run": "d5316f954b21c55e87579ac984497a1f", "internal_unique_id": "769922298715537408_following", "user_id": "769922298715537408", "name": "Elon Musk", "screen_name": "elonmusk", "profile_url": "https://x.com/elonmusk", "bio": "Tech entrepreneur", "location": "San Francisco, CA", "website": "https://example.com", "followers_count": 180000000, "following_count": 500, "tweets_count": 50000, "media_count": 1200, "likes_count": 30000, "listed_count": 5000, "created_at": "2016-08-24T10:00:00+00:00", "profile_image_url": "https://pbs.twimg.com/profile_images/12345/photo_normal.jpg", "profile_banner_url": "https://pbs.twimg.com/profile_banners/12345/1234567890", "is_blue_verified": false, "is_verified": false, "is_protected": false, "possibly_sensitive": false, "profile_image_shape": "Circle", "professional_type": "Creator", "professional_category": "Author", "relationship_type": "following", "_json": null, "functions": null, "native_id": 55956 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/twitter-followers-following-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Twitter Followers/Following Scraper settings Configure your Twitter Followers/Following Scraper squid settings. Choose whether to scrape followers, following, or both for each target account. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **scrape\_followers** | boolean | false | If true, collect the account's followers list | | **scrape\_following** | boolean | false | If true, collect the accounts the user is following | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **accounts** | array | Array of linked Twitter account hashes (required) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | This scraper requires a synced Twitter/X account. Add your Twitter cookies in the Accounts section before running. Enable both `scrape_followers` and `scrape_following` to get a complete picture of an account's network. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Twitter Followers/Following Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "scrape_followers": true, "scrape_following": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Twitter Followers/Following Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "scrape_followers": True, # Collect followers list "scrape_following": False # Skip following list } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Twitter Followers/Following Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "scrape_followers": true, "scrape_following": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/twitter-profile-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Twitter profile scraping tasks by screen name Add Twitter profiles to scrape by providing their screen names (usernames). Each task will retrieve detailed profile information for the specified user. Crawler ID: `6c5227261fbbd3430f926d409f4c44bf` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Twitter Profile Scraper | | **tasks** | array | Yes | Array of task objects, each containing a `screen_name` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **screen\_name** | string | Yes | Twitter username without the @ symbol (e.g., `elonmusk`) | You can add multiple screen names in a single request to scrape several profiles at once. The screen\_name should not include the @ symbol - use `elonmusk` not `@elonmusk`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "screen_name": "elonmusk" } ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Twitter profiles to scrape response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "tasks": [ {"screen_name": "elonmusk"} ], "squid": squid_id } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "0b1e3fd36e8249ec03220fb04b7fc71c", "created_at": "2025-07-04T04:52:45.180627", "is_active": true, "params": { "screen_name": "elonmusk" }, "module": 167, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/twitter-profile-scraper/credit-cost Credit cost for the Twitter Profile Scraper 1 credit per profile. # Get Results Source: https://docs.lobstr.io/examples/twitter-profile-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Twitter Profile Scraper Retrieve scraped data from your **Twitter Profile Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique internal Twitter/X identifier for the account. Example: `1720665183188922368` Whether the account has a Twitter Blue (X Premium) verified checkmark. Example: `true` Shape of the profile image displayed on Twitter/X (e.g. circle, square). Example: `Square` Description of the affiliate or organization label shown on the profile. Example: `xAI` Type of affiliate or organization label displayed on the profile. Example: `BusinessLabel` Date the Twitter/X account was created. Example: `2023-11-04T03:52:34+00:00` Total number of tweets this account has liked. Example: `79` Total number of followers of this Twitter/X account. Example: `6434825` Total number of accounts this profile follows. Example: `3` Number of public Twitter/X lists this account is included in. Example: `5064` Bio text shown on the Twitter/X profile. Example: `https://t.co/fqNKQSiLQB @grok it` Location shown on the Twitter/X profile. Example: `wherever you are` Website URL linked on the Twitter/X profile. Example: `https://grok.com` Total number of media items (photos and videos) posted by this account. Example: `2693370` Display name of the Twitter/X account. Example: `Grok` Number of followers excluding Twitter Blue subscribers. Example: `6434825` Whether the account's content is flagged as possibly sensitive. Example: `false` URL of the account's profile banner or header image. Example: `https://pbs.twimg.com/profile_banners/1720665183188922368/1740213586` URL of the account's profile picture. Example: `https://pbs.twimg.com/profile_images/1893219113717342208/Vgg2hEPa_normal.jpg` Twitter/X handle of the account (without the @ symbol). Example: `grok` Total number of tweets published by this account. Example: `56218804` Whether the account is eligible for Twitter Super Follows monetization. Example: `false` Reason the account is verified (e.g. government, company, notable). Example: `Denne kontoen er verifisert fordi den er tilknyttet @xai på X. Les mer` Number of subscribers to this account's paid creator content. Example: `0` Unix timestamp in milliseconds of when the account was verified. Example: `1699406829926` Raw JSON profile data returned by the Twitter/X API ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 55010, "object": "result", "squid": "20d99d002cd0afec5fa3342a8e4c1389", "run": "b59289ed2963092e5e8f30a09f0cdeca", "internal_id": "1720665183188922368", "is_blue_verified": true, "profile_image_shape": "Square", "affiliates_highlighted_label_description": "xAI", "affiliates_highlighted_label_user_label_type": "BusinessLabel", "created_at": "2023-11-04T03:52:34+00:00", "favourites_count": 79, "followers_count": 6434825, "following_count": 3, "listed_count": 5064, "bio": "https://t.co/fqNKQSiLQB\n@grok it", "location": "wherever you are", "website": "https://grok.com", "media_count": 2693370, "name": "Grok", "normal_followers_count": 6434825, "possibly_sensitive": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/1720665183188922368/1740213586", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1893219113717342208/Vgg2hEPa_normal.jpg", "screen_name": "grok", "posts_count": 56218804, "super_follow_eligible": false, "verification_info_reason_description_text": "Denne kontoen er verifisert fordi den er tilknyttet @xai på X. Les mer", "creator_subscriptions_count": 0, "verified_since_msec": "1699406829926", "_json": null, "functions": null, "native_id": 55010 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/twitter-profile-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Twitter Profile Scraper settings including raw JSON output Configure your Twitter Profile Scraper squid settings. Control output format, concurrency, and whether to return raw JSON data from Twitter's API. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **json** | boolean | false | If true, returns the complete raw JSON payload for the user profile | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Enable `json: true` to get the complete raw API response for advanced analysis or custom field extraction. The raw JSON contains additional fields not included in the parsed output. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Twitter Profile Scraper (2)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "json": true } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Twitter Profile Scraper (2)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "json": True # Return raw JSON from Twitter API } } ) print(response.json()) ``` ## Response ```json 201 theme={null} { "name": "Twitter Profile Scraper (2)", "no_line_breaks": true, "params": { "json": true }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/twitter-search-results-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Twitter search scraping tasks by providing search URLs Add Twitter search results to scrape by providing search URLs from X.com (Twitter). The scraper will extract tweets matching your search query. Crawler ID: `1b16ff414d27920fb325b68436dbf5fc` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Twitter Search Results Scraper | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Twitter search URL (e.g., `https://x.com/search?q=keyword&src=typed_query&f=top`) | ## Search URL Parameters Twitter search URLs support various filters via query parameters: | Parameter | Description | | - | - | | **q** | Search query (URL encoded) | | **f=top** | Show top results | | **f=live** | Show latest results | | **f=user** | Show people results | | **f=image** | Show image results | | **f=video** | Show video results | Perform your search on Twitter/X first, apply filters, then copy the URL to preserve all search parameters. Use `f=live` to get the most recent tweets matching your query. Advanced search operators like `from:username`, `since:2024-01-01`, and `filter:media` are supported in the query. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://x.com/search?q=artificial%20intelligence&src=typed_query&f=top" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Twitter search URLs to scrape response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "squid": squid_id, "tasks": [ {"url": "https://x.com/search?q=artificial%20intelligence&src=typed_query&f=top"} ] } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "9fb224b5e2ce36942a74d1e94dd1cf14", "created_at": "2025-07-07T09:53:32.017225", "is_active": true, "params": { "url": "https://x.com/search?q=artificial%20intelligence&src=typed_query&f=top" }, "module": 178, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/twitter-search-results-scraper/credit-cost Credit cost for the Twitter Search Results Scraper 1 credit per tweet. # Get Results Source: https://docs.lobstr.io/examples/twitter-search-results-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Twitter Search Results Scraper Retrieve scraped data from your **Twitter Search Results Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique internal identifier for the tweet. Example: `1886958273636507688` Direct URL to the tweet on Twitter/X. Example: `https://twitter.com/ultrabogotano/status/1886958273636507688` URL of the original tweet (populated if this is a retweet or quote tweet) Unique identifier of the original tweet (for retweets and quote tweets). Example: `1884600403884380413` Display name of the tweet author. Example: `Surfer Calavera` Unique internal Twitter/X identifier of the tweet author. Example: `277545465` Twitter/X handle of the author (without the @ symbol). Example: `ultrabogotano` Date and time the tweet was published. Example: `2025-02-05T02:01:25+00:00` Full text content of the tweet. Example: `Sigan usando todos los sufijos numéricos que quieran, @Tigo_Colombia. Yo les sigo respondiendo como se merecen ya que no han sido capaces de borrar mi número de su base de datos. @sicsuper https://t.co/qedLjpDMAC` Total number of times the tweet has been viewed. Example: `343` Number of times the tweet has been retweeted. Example: `0` Number of likes the tweet received. Example: `1` Number of times the tweet has been quoted. Example: `0` Number of replies to the tweet. Example: `1` Number of times the tweet has been bookmarked. Example: `1` Thumbnail URL of the 1st media item in the tweet (0-indexed). Example: `https://pbs.twimg.com/media/Gi_SiztWMAEoLZd.jpg` Type of the 1st media item (e.g. photo, video, animated\_gif). Example: `photo` URL of the 1st media item in the tweet. Example: `https://pbs.twimg.com/media/Gi_SiztWMAEoLZd.jpg` Thumbnail URL of the 2nd media item attached to the tweet. Example: `https://pbs.twimg.com/media/Gi_SizvXoAAbRzD.jpg` Type of the 2nd media item (e.g. photo, video). Example: `photo` URL of the 2nd media item attached to the tweet. Example: `https://pbs.twimg.com/media/Gi_SizvXoAAbRzD.jpg` Thumbnail URL of the 3rd media item attached to the tweet. Example: `https://pbs.twimg.com/media/Gi_SizqWUAAerP8.jpg` Type of the 3rd media item (e.g. photo, video). Example: `photo` URL of the 3rd media item attached to the tweet. Example: `https://pbs.twimg.com/media/Gi_SizqWUAAerP8.jpg` Thumbnail URL of the 4th media item attached to the tweet Type of the 4th media item (e.g. photo, video) URL of the 4th media item attached to the tweet URL of a linked media card (e.g. article preview) embedded in the tweet Domain of the linked media card embedded in the tweet Thumbnail image URL of the linked media card Title of the linked media card embedded in the tweet Description text of the linked media card Whether this tweet is a reply to another tweet. Example: `false` Whether this tweet is a retweet of another tweet. Example: `false` Whether this tweet quotes another tweet. Example: `true` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 35408, "object": "result", "squid": "ba8cbb253043c4013bdf3110f36fa5ed", "run": "f86fef1dc7b51f51dd8d7844eb707927", "internal_unique_id": "1886958273636507688", "tweet_url": "https://twitter.com/ultrabogotano/status/1886958273636507688", "original_tweet_url": null, "original_tweet_id": "1884600403884380413", "name": "Surfer Calavera", "user_id": "277545465", "username": "ultrabogotano", "published_at": "2025-02-05T02:01:25+00:00", "content": "Sigan usando todos los sufijos numéricos que quieran, @Tigo_Colombia. Yo les sigo respondiendo como se merecen ya que no han sido capaces de borrar mi número de su base de datos.\n@sicsuper https://t.co/qedLjpDMAC", "views_count": 343, "retweet_count": 0, "likes": 1, "quote_count": 0, "reply_count": 1, "bookmarks_count": 1, "media_0_thumbnail": "https://pbs.twimg.com/media/Gi_SiztWMAEoLZd.jpg", "media_0_type": "photo", "media_0_url": "https://pbs.twimg.com/media/Gi_SiztWMAEoLZd.jpg", "media_1_thumbnail": "https://pbs.twimg.com/media/Gi_SizvXoAAbRzD.jpg", "media_1_type": "photo", "media_1_url": "https://pbs.twimg.com/media/Gi_SizvXoAAbRzD.jpg", "media_2_thumbnail": "https://pbs.twimg.com/media/Gi_SizqWUAAerP8.jpg", "media_2_type": "photo", "media_2_url": "https://pbs.twimg.com/media/Gi_SizqWUAAerP8.jpg", "media_3_thumbnail": "", "media_3_type": "", "media_3_url": "", "binded_media_url": "", "binded_media_domain": "", "binded_media_thumbnail_url": "", "binded_media_title": "", "binded_media_description": "", "is_reply": false, "is_retweeted": false, "is_quoted": true, "functions": null, "native_id": 35408 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/twitter-search-results-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Twitter Search Results Scraper settings Configure your Twitter Search Results Scraper squid settings. Control the maximum number of results and use `fetch_since` to collect only recent tweets. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of tweets to scrape per search query | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | | **fetch\_since** | string | — | Stop scraping when tweets older than this threshold are reached. Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`). Works best with Latest search URLs (`&f=live`). | | **fetch\_since\_timezone** | string | UTC | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`) | | **sort** | string | From URL | Result ordering: `From URL` keeps whatever order is in the search URL, `Top` sorts by relevance, `Latest` sorts by recency | | **tweet\_language** | string | — | Restrict to tweets in a specific language (ISO 639-1 code, e.g. `en`, `fr`, `de`) | | **only\_verified\_users** | boolean | false | Only collect tweets from verified accounts | | **only\_twitter\_blue** | boolean | false | Only collect tweets from Twitter Blue (X Premium) subscribers | | **only\_image** | boolean | false | Only collect tweets that contain at least one image | | **only\_video** | boolean | false | Only collect tweets that contain a video | | **only\_quote** | boolean | false | Only collect quote tweets | | **author** | string | — | Only collect tweets from this author (`@handle`) | | **in\_reply\_to** | string | — | Only collect tweets that are replies to this user (`@handle`) | | **mentioning** | string | — | Only collect tweets that mention this user (`@handle`) | | **geotagged\_near** | string | — | Only collect tweets geotagged near this place (city or place name) | | **within\_radius** | string | — | Radius around `geotagged_near`, e.g. `15km` or `10mi` | | **geocode** | string | — | Only collect tweets from users within a radius of a lat/long point (format: `lat,lng,radius`) | | **place\_object\_id** | string | — | Only collect tweets tagged with this Twitter place object ID | | **minimum\_retweets** | integer | — | Only collect tweets with at least this many retweets | | **minimum\_favorites** | integer | — | Only collect tweets with at least this many likes | | **minimum\_replies** | integer | — | Only collect tweets with at least this many replies | | **start\_date** | string | — | Only collect tweets posted on or after this date (`YYYY-MM-DD`) | | **end\_date** | string | — | Only collect tweets posted before this date (`YYYY-MM-DD`) | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since: "24h"` for incremental runs that collect only the last day of tweets. Pair with a Latest search URL (`&f=live`) for the most predictable cutoff behavior. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Twitter Search Results Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 500, "fetch_since": "7d", "fetch_since_timezone": "Europe/Paris" } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Twitter Search Results Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 500, "fetch_since": "7d", "fetch_since_timezone": "Europe/Paris" } } ) print(response.json()) ``` ## Response ```json 201 theme={null} { "name": "Twitter Search Results Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 500, "fetch_since": "7d", "fetch_since_timezone": "Europe/Paris" } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/twitter-user-tweets-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Twitter user tweets scraping tasks by screen name Add Twitter users to scrape tweets from by providing their screen names (usernames). The scraper will retrieve tweets from the specified user's timeline. Crawler ID: `9d6b83aaf1ae9d5b4a775d223e3eb5df` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Twitter User Tweets Scraper | | **tasks** | array | Yes | Array of task objects, each containing a `screen_name` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **screen\_name** | string | Yes | Twitter username without the @ symbol (e.g., `elonmusk`) | You can add multiple screen names in a single request to scrape tweets from several users at once. The screen\_name should not include the @ symbol - use `elonmusk` not `@elonmusk`. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "screen_name": "elonmusk" } ], "squid": "YOUR_SQUID_HASH" }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Twitter users to scrape tweets from response = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "tasks": [ {"screen_name": "elonmusk"} ], "squid": squid_id } ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "dea6b229a9cf67cc5363dfe6062b63ba", "created_at": "2025-07-07T09:36:01.623358", "is_active": true, "params": { "username": "elonmusk" }, "module": 127, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/twitter-user-tweets-scraper/credit-cost Credit cost for the Twitter User Tweets Scraper 1 credit per tweet. # Get Results Source: https://docs.lobstr.io/examples/twitter-user-tweets-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Twitter User Tweets Scraper Retrieve scraped data from your **Twitter User Tweets Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique internal identifier for the tweet. Example: `1996281178668876214` Direct URL to the tweet on Twitter/X. Example: `https://twitter.com/OpenAI/status/1996281178668876214` URL of the original tweet (populated if this is a retweet or quote tweet) Unique identifier of the original tweet (for retweets and quote tweets) Display name of the tweet author. Example: `OpenAI` Unique internal Twitter/X identifier of the tweet author. Example: `4398626122` Twitter/X handle of the author (without the @ symbol). Example: `OpenAI` Date and time the tweet was published. Example: `2025-12-03T18:11:36+00:00` Full text content of the tweet. Example: \`In our tests, we found that the confessions method significantly improves the visibility of model misbehavior. Averaging across our evaluations designed to induce misbehavior, the probability of "false negatives" (i.e., the model not complying with instructions and then not confessing to it) is only 4.4%.\` Twitter/X handle of the account this tweet is replying to. Example: `OpenAI` Unique identifier of the tweet being replied to. Example: `1996281175770599447` Twitter/X user ID of the account being replied to. Example: `4398626122` Total number of times the tweet has been viewed. Example: `105130` Number of times the tweet has been retweeted. Example: `31` Number of likes the tweet received. Example: `408` Number of times the tweet has been quoted. Example: `2` Number of replies to the tweet. Example: `31` Number of times the tweet has been bookmarked. Example: `48` Thumbnail URL of the 1st media item in the tweet (0-indexed). Example: `https://pbs.twimg.com/media/G7Q1aWgb0AAuhN-.jpg` Type of the 1st media item (e.g. photo, video, animated\_gif). Example: `photo` URL of the 1st media item in the tweet. Example: `https://pbs.twimg.com/media/G7Q1aWgb0AAuhN-.jpg` Thumbnail URL of the 2nd media item attached to the tweet. Example: `https://pbs.twimg.com/media/G7Q1aWZbMAAxa4c.jpg` Type of the 2nd media item (e.g. photo, video). Example: `photo` URL of the 2nd media item attached to the tweet. Example: `https://pbs.twimg.com/media/G7Q1aWZbMAAxa4c.jpg` Thumbnail URL of the 3rd media item attached to the tweet Type of the 3rd media item (e.g. photo, video) URL of the 3rd media item attached to the tweet Thumbnail URL of the 4th media item attached to the tweet Type of the 4th media item (e.g. photo, video) URL of the 4th media item attached to the tweet URL of a linked media card (e.g. article preview) embedded in the tweet Domain of the linked media card embedded in the tweet Thumbnail image URL of the linked media card Title of the linked media card embedded in the tweet Description text of the linked media card Whether this tweet is a retweet of another tweet. Example: `false` Whether this tweet quotes another tweet. Example: `false` Whether the tweet is pinned to the top of the author's profile. Example: `false` Raw JSON tweet data returned by the Twitter/X API ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 19211, "object": "result", "squid": "d7f6258b2a43ab78cf0dca3a237c49f8", "run": "082110ac9afc9d87f75894a0261a3e38", "internal_unique_id": "1996281178668876214", "tweet_url": "https://twitter.com/OpenAI/status/1996281178668876214", "original_tweet_url": null, "original_tweet_id": null, "name": "OpenAI", "user_id": "4398626122", "username": "OpenAI", "published_at": "2025-12-03T18:11:36+00:00", "content": "In our tests, we found that the confessions method significantly improves the visibility of model misbehavior.\n\nAveraging across our evaluations designed to induce misbehavior, the probability of \"false negatives\" (i.e., the model not complying with instructions and then not confessing to it) is only 4.4%.", "in_reply_to_screen_name": "OpenAI", "in_reply_to_status_id_str": "1996281175770599447", "in_reply_to_user_id_str": "4398626122", "views_count": 105130, "retweet_count": 31, "likes": 408, "quote_count": 2, "reply_count": 31, "bookmarks_count": 48, "media_0_thumbnail": "https://pbs.twimg.com/media/G7Q1aWgb0AAuhN-.jpg", "media_0_type": "photo", "media_0_url": "https://pbs.twimg.com/media/G7Q1aWgb0AAuhN-.jpg", "media_1_thumbnail": "https://pbs.twimg.com/media/G7Q1aWZbMAAxa4c.jpg", "media_1_type": "photo", "media_1_url": "https://pbs.twimg.com/media/G7Q1aWZbMAAxa4c.jpg", "media_2_thumbnail": "", "media_2_type": "", "media_2_url": "", "media_3_thumbnail": "", "media_3_type": "", "media_3_url": "", "binded_media_url": "", "binded_media_domain": "", "binded_media_thumbnail_url": "", "binded_media_title": "", "binded_media_description": "", "is_retweeted": false, "is_quoted": false, "is_pinned": false, "_json": null, "functions": null, "native_id": 19211 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/twitter-user-tweets-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Twitter User Tweets Scraper settings Configure your Twitter User Tweets Scraper squid settings. Control the number of tweets to fetch, time filtering, and whether to include retweets and pinned tweets. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **json** | boolean | false | If true, returns the complete raw JSON payload for each tweet | | **max\_results** | integer | null | Maximum number of tweets to scrape per user | | **fetch\_since** | string | null | Stop scraping when items older than this threshold are reached (based on `published_at`). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) | | **fetch\_since\_timezone** | string | null | Timezone for interpreting an absolute `fetch_since` date (e.g. `Europe/Paris`). Only applies when `fetch_since` is an absolute date — ignored for relative values like `24h` or `7d`. See [supported timezones](/docs/timezones). | | **exclude\_reposts** | boolean | false | If true, excludes retweets from results | | **collect\_pinned\_tweets** | boolean | false | If true, includes pinned tweets in results | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `fetch_since` to monitor recent activity - set to `24` to only collect tweets from the last day. Enable `exclude_reposts` to focus on original content only. Pinned tweets are not collected by default - enable `collect_pinned_tweets` if you need them. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Twitter User Tweets Scraper (2)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "json": true, "fetch_since": null, "max_results": 98, "exclude_reposts": true, "collect_pinned_tweets": true } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update scraper settings response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Twitter User Tweets Scraper (2)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "json": True, # Return raw JSON from Twitter API "fetch_since": None, # No time limit (fetch all) "max_results": 98, # Maximum tweets per user "exclude_reposts": True, # Don't include retweets "collect_pinned_tweets": True # Include pinned tweets } } ) print(response.json()) ``` ## Response ```json 201 theme={null} { "name": "Twitter User Tweets Scraper (2)", "no_line_breaks": true, "params": { "json": true, "fetch_since": null, "max_results": 98, "exclude_reposts": true, "collect_pinned_tweets": true }, "to_complete": false, "export_unique_results": true } ``` # Add Tasks Source: https://docs.lobstr.io/examples/upwork-jobs-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Upwork Jobs Scraper squid Add URLs or inputs to your **Upwork Jobs Scraper** squid. Crawler ID: `681a0d2e2641326f7b87cda35513618a` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Upwork job search URL, keyword, or single posting link. Example: `https://www.upwork.com/nx/search/jobs/?q=python+developer` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "681a0d2e2641326f7b87cda35513618a", "tasks": [ {"url": "https://www.upwork.com/nx/search/jobs/?q=python+developer"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "681a0d2e2641326f7b87cda35513618a", "tasks": [ {"url": "https://www.upwork.com/nx/search/jobs/?q=python+developer"} ] } ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.upwork.com/nx/search/jobs/?q=python+developer"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/upwork-jobs-scraper/credit-cost Credit cost for the Upwork Jobs Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Jobs | 1 | 1 credit per job posting. | | Job Details | 1 | 1 extra credit per job posting when the add-on is enabled. Off by default. | # Get Results Source: https://docs.lobstr.io/examples/upwork-jobs-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Upwork Jobs Scraper Retrieve scraped data from your **Upwork Jobs Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Unique Upwork job posting identifier. Example: `~01abc123def456` Direct URL to the job posting. Example: `https://www.upwork.com/jobs/~01abc123def456` Upwork's public job reference (the \~02... token) Job title. Example: `Python Developer for Data Pipeline` Full job description Date and time published, in UTC. Example: `2026-09-14T10:30:00Z` Date and time created, in UTC Hourly or Fixed-Price. Example: `Fixed-Price` Human-readable budget. Example: `$500` Fixed-price budget as a number. Example: `500.0` Lower bound of hourly rate range Upper bound of hourly rate range Expected project duration. Example: `1 to 3 months` Expected project duration in weeks Expected weekly workload on hourly jobs Experience level the client asks for. Example: `Intermediate` Skills attached to the posting, comma-separated. Example: `Python, Pandas, Apache Airflow` ### Detail Fields The following fields require `job_details: true` in settings. True when from an Upwork Enterprise client Number of freelancers the client wants Currency of the budget/hourly rate Number of proposals received Upwork category of the job Top-level Upwork category group Hiring status of the posting Freelancers already hired Freelancers invited to interview Invitations the client sent Last time the client acted on this posting Country of the client City of the client Timezone of the client Total amount the client has spent on Upwork Average feedback score of the client, out of 5 Number of reviews the client has received Number of jobs the client has posted Number of contracts currently running Number of jobs that ended in a hire Total hours the client has paid for Average hourly rate the client has paid True when payment method is verified Date the client joined Upwork Number of open job postings Countries restricted to, comma-separated Minimum Job Success Score required English level the client asks for True when only Rising Talent accepted True when portfolio is required True when restricted to client's local market URLs of similar jobs, comma-separated ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"job_id": "~01abc123def456", "title": "Python Developer for Data Pipeline", "job_type": "Fixed-Price", "budget_amount": 500.0, "experience_level": "Intermediate", "skills": "Python, Pandas, Apache Airflow", "posted_at": "2026-09-14T10:30:00Z"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/upwork-jobs-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Upwork Jobs Scraper settings Configure your **Upwork Jobs Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | rows | integer | — | Number of rows returned per API page | | url | string | — | Upwork search URL, keyword, or single job posting link | | category | string | Any | Only return jobs from this Upwork category | | hourly\_or\_fixed | string | Any | Filter by hourly or fixed-price jobs | | budget\_range | string | — | Budget filter as min-max in USD, e.g. `100-` or `-500` | | experience\_level | string | Any | Entry Level, Intermediate, or Expert | | client\_history | string | Any | Filter by client's hiring history | | client\_location | string | — | Only return jobs from clients in this country | | posted\_within | string | Any time | Only return jobs published within this window | | sort | string | Relevance | Relevance or Newest | | max\_results | integer | 1000 | Stop each task after this many jobs | | fetch\_since | string | — | Only collect jobs published after this threshold (24h, 7d, or YYYY-MM-DD) | | fetch\_since\_timezone | string | — | Timezone for fetch\_since | | job\_details | boolean | false | Open each job posting to collect client data (country, city, total spent, rating) | Setting `job_details: true` enables additional detail fields in results. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/681a0d2e2641326f7b87cda35513618a \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "max_results": 500, "sort": "Newest", "experience_level": "Intermediate", "job_details": true }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/681a0d2e2641326f7b87cda35513618a", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "max_results": 500, "sort": "Newest", "experience_level": "Intermediate", "job_details": True } ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"max_results": 500, "sort": "Newest", "experience_level": "Intermediate", "job_details": true, "hourly_or_fixed": "Any", "posted_within": "Any time"}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/vinted-products-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Vinted catalog search URLs to scrape product listings Add Vinted catalog search URLs to scrape product listings from the marketplace. The scraper extracts product details, pricing, and seller information. Use Vinted's catalog URL with search filters applied. You can filter by category, brand, size, price range, and sort order directly in the URL. Crawler ID: `ffd34f9b42a79b7323a048f09fc158e6` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Vinted Products Scraper crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Vinted catalog URL (e.g., `https://www.vinted.fr/catalog?search_text=nike&order=newest_first`) | Apply filters on Vinted first, then copy the URL. All filter parameters will be preserved in the URL. Vinted operates country-specific sites (vinted.fr, vinted.de, vinted.es, etc.). Use the appropriate domain for your target market. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.vinted.fr/catalog?search_text=nike&order=newest_first" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add Vinted catalog search URLs payload = { "squid": squid_id, "tasks": [ {"url": "https://www.vinted.fr/catalog?search_text=nike&order=newest_first"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.vinted.fr/catalog?search_text=nike&order=newest_first" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/vinted-products-scraper/credit-cost Credit cost for the Vinted Products Scraper 1 credit per product. # Get Results Source: https://docs.lobstr.io/examples/vinted-products-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Vinted Products Scraper Retrieve scraped data from your **Vinted Products Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique identifier for the listing on Vinted. Example: `8381892452` Direct URL to the item listing on Vinted. Example: `https://www.vinted.com/items/8381892452-air-jordan-5-wolf-grey` Title of the item listing on Vinted. Example: `Air Jordan 5 wolf grey` Listed price of the item. Example: `291` Whether the listing is currently visible to buyers on Vinted. Example: `1` Discount applied to the item price ISO 3-letter currency code of the listed price. Example: `USD` Brand name of the listed item. Example: `Jordan` Whether the seller is open to swapping the item instead of selling. Example: `false` Whether the listing has paid promotion on Vinted. Example: `false` URL of the main listing image on Vinted. Example: `https://images1.vinted.net/t/01_01a39_zLtBDgLdFFsi75ds1PDdGcQe/f800/1773400288.webp?s=08f8c6b85155c02fa5358a303ccd36bfb44fabf9` Dominant colour detected in the main listing image. Example: `#545962` Number of times the listing has been added to favourites by buyers. Example: `0` Whether the item is marked as favourite by the scraping account. Example: `false` Internal identifier for the favourite group Trust or certification badge on the listing (e.g. Pro seller) Internal conversion metric for the listing Buyer protection or service fee charged by Vinted. Example: `15.25` Total price including all fees and service charges. Example: `306.25` Number of times the listing has been viewed. Example: `0` Size label of the item (e.g. S, M, L, 38, UK10). Example: `10` Internal content source identifier for the listing. Example: `catalog` Unique Vinted identifier of the seller. Example: `223926023` Login username of the seller on Vinted. Example: `saf0921` Whether the seller is a registered business account on Vinted. Example: `false` URL to the seller's Vinted profile. Example: `https://www.vinted.com/member/223926023-saf0921` URL of the seller's Vinted profile photo. Example: `https://images1.vinted.net/t/06_00766_fgANGTQTXdbSuyxoBr4DrCQD/f800/1765632251.webp?s=41905c4cbb60f2d60151d0c4bf1039bd6a4e4863` Whether the seller's account is flagged as suspicious by Vinted. Example: `false` Seller's preferred item category orientation (e.g. men, women, kids) Whether the seller's account is hidden on Vinted. Example: `false` Full description text provided by the seller for the item. Example: `Air Jordan 5 wolf grey, brand: Jordan, condition: New with tags, size: 10, $291.00, $306.25 includes Buyer Protection` Condition of the item as listed by the seller, not its sale/availability status. One of `New with tags`, `New without tags`, `Very good condition`, `Good condition`, `Satisfactory condition` (exact wording may appear in the seller's own locale, e.g. `Très bon état`). Example: `New with tags` ## Response ```json 200 theme={null} { "total_results": 84, "limit": 50, "page": 1, "total_pages": 2, "data": [ { "internal_id": "8381892452", "url": "https://www.vinted.com/items/8381892452-air-jordan-5-wolf-grey", "title": "Air Jordan 5 wolf grey", "price": 291, "is_visible": 1, "discount": "", "currency": "USD", "brand_title": "Jordan", "is_for_swap": false, "promoted": false, "image_url": "https://images1.vinted.net/t/01_01a39_zLtBDgLdFFsi75ds1PDdGcQe/f800/1773400288.webp?s=08f8c6b85155c02fa5358a303ccd36bfb44fabf9", "image_dominant_color": "#545962", "favourite_count": 0, "is_favourite": false, "favourite_group_id": "", "badge": "", "conversion": null, "service_fee": 15.25, "total_item_price": 306.25, "view_count": 0, "size_title": "10", "content_source": "catalog", "user_id": "223926023", "user_login": "saf0921", "user_business": false, "user_profile_url": "https://www.vinted.com/member/223926023-saf0921", "user_photo_url": "https://images1.vinted.net/t/06_00766_fgANGTQTXdbSuyxoBr4DrCQD/f800/1765632251.webp?s=41905c4cbb60f2d60151d0c4bf1039bd6a4e4863", "user_is_sus": false, "user_orientation": "men", "user_is_hidden": false, "description": "Air Jordan 5 wolf grey, brand: Jordan, condition: New with tags, size: 10, $291.00, $306.25 includes Buyer Protection", "status": "New with tags" }, { "internal_id": "6703908171", "url": "https://www.vinted.com/items/6703908171-cropped-tank-top", "title": "Cropped tank top", "price": 6, "is_visible": 1, "discount": "", "currency": "EUR", "brand_title": "Pull & Bear", "is_for_swap": false, "promoted": false, "image_url": "https://images1.vinted.net/t/01_020d0_BjtV6XdKS7u9y2GKBR7R82gh/f800/1752829032.jpeg?s=f93b1a95e2303af55d0a1fa8689ccc6d17ce596a", "image_dominant_color": "#8C8271", "favourite_count": 0, "is_favourite": false, "favourite_group_id": "", "badge": "", "conversion": null, "service_fee": 1, "total_item_price": 7, "view_count": 0, "size_title": "XS / 34 / 6", "content_source": "catalog", "user_id": "15167827", "user_login": "ofrzrfrazier", "user_business": false, "user_profile_url": "https://www.vinted.com/member/15167827-ofrzrfrazier", "user_photo_url": "https://images1.vinted.net/t/02_00d60_iK5xoZLZYfDPApkachVv7owN/f800/1605256954.jpeg?s=ef5fd21e845124b78dcdf5e2996192b695dfa82b", "user_is_sus": false, "user_orientation": "", "user_is_hidden": false, "description": "Cropped tank top, brand: Pull & Bear, condition: Very good condition, size: XS / 34 / 6, €6.00, €7.00 includes Buyer Protection", "status": "Very good condition" } ] } ``` # Update Settings Source: https://docs.lobstr.io/examples/vinted-products-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure scraper settings for Vinted Products Scraper Configure your squid settings for the Vinted Products Scraper. Control pagination depth and result limits. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_pages** | integer | 10 | Maximum number of catalog pages to scrape per task (max: 10) | | **max\_results** | integer | unlimited | Maximum number of items to collect per task | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique results across all tasks in the run | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping workers (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `max_results` to cap items per search URL, and `max_unique_results_per_run` for a global limit across all tasks. Vinted catalog pages typically contain 24-48 products per page. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Vinted Products Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 10, "max_results": 200 } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Vinted Products Scraper (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_pages": 10, "max_results": 200 } } ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Vinted Products Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_pages": 10, "max_results": 200 } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/yellow-pages-companies-search/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Yellow Pages Companies Search Export squid Add URLs or inputs to your **Yellow Pages Companies Search Export** squid. Crawler ID: `03fcec3e9345dbf9e42a0a2f2f04c017` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Yellow Pages search URL. Example: `https://www.yellowpages.com/search?search_terms=plumber&geo_location_terms=Austin%2C+TX` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.yellowpages.com/search?search_terms=plumber&geo_location_terms=Austin%2C+TX"}]}' ``` ```python Python theme={null} import requests headers = {"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"} response = requests.post("https://api.lobstr.io/v1/tasks", headers=headers, json={"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.yellowpages.com/search?search_terms=plumber&geo_location_terms=Austin%2C+TX"}]}) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.yellowpages.com/search?search_terms=plumber&geo_location_terms=Austin%2C+TX"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/yellow-pages-companies-search/credit-cost Credit cost for the Yellow Pages Companies Search Export | Function | Cost (credits) | Notes | | - | - | - | | Export Businesses | 1 | 1 credit per business listing. | | Collect Additional Details | 1 | 1 extra credit per business listing when the add-on is enabled. Off by default. | # Get Results Source: https://docs.lobstr.io/examples/yellow-pages-companies-search/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Yellow Pages Companies Search Export Retrieve scraped data from your **Yellow Pages Companies Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Unique Yellow Pages identifier (ypid). Example: `560515561` Business name. Example: `ABC Plumbing Co.` Direct URL to the listing. Whether the business is sponsored. Comma-separated Yellow Pages categories. Example: `Plumbers, Water Heater Repair` Phone number. Example: `(512) 555-0123` Full formatted address. Street address. City. Example: `Austin` US state code. Example: `TX` ZIP code. Example: `78701` Average customer rating. Example: `4.7` Total customer reviews. Example: `89` Years operating. Opening hours rule. Business website. Example: `https://abcplumbing.com` Short snippet from the search page. Thumbnail image URL. ### Detail Fields The following fields require `results_details: true` in settings. Latitude. Longitude. Email address on the business page. Full business description. Year founded. Comma-separated list of business photo URLs. Facebook page URL. Instagram profile URL. Twitter / X profile URL. LinkedIn page URL. ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"name": "ABC Plumbing Co.", "city": "Austin", "state": "TX", "phone": "(512) 555-0123", "rating": 4.7, "review_count": 89, "website": "https://abcplumbing.com"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/yellow-pages-companies-search/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Yellow Pages Companies Search Export settings Configure your **Yellow Pages Companies Search Export** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | **url** | string | — | Yellow Pages search URL (use this OR keyword + location) | | **keyword** | string | — | What you are looking for on Yellow Pages | | **location** | string | — | US city and state to search in, e.g. 'Austin, TX' | | **max\_unique\_results\_per\_run** | integer | — | Max unique results across all tasks in a run | | **max\_results** | integer | 3000 | Maximum results per task (Yellow Pages max \~3000) | | **sort** | string | Default | How Yellow Pages orders results: Default, Distance, Best Match, Highest Rated, Most Reviewed | | **min\_rating** | string | — | Only collect businesses with at least this rating | | **min\_reviews** | integer | — | Only collect businesses with at least this many reviews | | **category\_match** | boolean | false | Only collect businesses whose categories contain your search term | | **results\_details** | boolean | false | Visit each business page to collect lat/lng, email, description, social links | Setting `results_details: true` enables additional detail fields in results, including latitude, longitude, email, description, and social media links. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"keyword": "plumber", "location": "Austin, TX", "max_results": 100, "sort": "Highest Rated"}}' ``` ```python Python theme={null} import requests requests.post("https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"}, json={"params": {"keyword": "plumber", "location": "Austin, TX", "max_results": 100, "sort": "Highest Rated"}}) ``` ## Response ```json 201 theme={null} {"params": {"keyword": "plumber", "location": "Austin, TX", "max_results": 100, "sort": "Highest Rated"}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/yelp-reviews-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add Yelp business URLs to scrape reviews Add Yelp business page URLs to collect all reviews for each business. The scraper extracts the full review text, star rating, reviewer profile, photos, and community votes. Crawler ID: `ea1c83f60e32a4e1de91a1ed1e41b268` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Yelp Reviews Export crawler | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | Full Yelp business URL — must contain `/biz/` (e.g., `https://www.yelp.com/biz/olio-e-piu-new-york-7`). Also accepts country variants (yelp.fr, yelp.co.uk, etc.) | Find the business on Yelp, then copy the URL from the address bar. Make sure it contains `/biz/` — not a search URL. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.yelp.com/biz/olio-e-piu-new-york-7" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "squid": squid_id, "tasks": [ {"url": "https://www.yelp.com/biz/olio-e-piu-new-york-7"}, {"url": "https://www.yelp.com/biz/le-bernardin-new-york"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "created_at": "2026-05-12T10:00:00.000000", "is_active": true, "params": { "url": "https://www.yelp.com/biz/olio-e-piu-new-york-7" }, "module": 116, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/yelp-reviews-scraper/credit-cost Credit cost for the Yelp Reviews Scraper 0.2 credit per review # Get Results Source: https://docs.lobstr.io/examples/yelp-reviews-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped reviews from Yelp Reviews Export Retrieve scraped reviews from your **Yelp Reviews Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Yelp review ID — unique across the platform. Example: `E2HrRt6Pf_l2lzaB_eDc5Q` Direct shareable URL to the review on Yelp. Example: `https://www.yelp.com/biz/olio-e-piu-new-york-7?hrid=E2HrRt6Pf_l2lzaB_eDc5Q` Star rating given by the reviewer (1–5). Example: `5` Full text of the review. Example: `Really great service, food, and ambiance!!` Date and time the review was last posted or modified (UTC, ISO format). Example: `2026-04-04 10:40:18` Language of the review (ISO 639-1 code). Example: `en` Whether the review is highlighted as featured by Yelp. Example: `false` Community vote count: "Helpful". Example: `12` Community vote count: "Thanks". Example: `4` Community vote count: "Love This". Example: `8` Community vote count: "Oh No". Example: `1` Text of the owner's reply to the review, if any Date and time the owner reply was posted (UTC, ISO format). Example: `2026-04-10 09:15:00` Unix timestamp of the owner reply. Example: `1744277700` Number of photos attached to the review. Example: `2` Comma-separated URLs of photos attached to the review Number of videos attached to the review. Example: `0` Display name of the reviewer. Example: `Diana H.` Yelp user ID of the reviewer. Example: `KrnCBHS68nvCDyLOjC7TwQ` Reviewer's home location as displayed on Yelp. Example: `Manhattan, New York, NY` Total number of reviews the reviewer has posted on Yelp. Example: `1` Number of friends the reviewer has on Yelp. Example: `12` Number of check-ins the reviewer has logged on Yelp. Example: `0` Total number of photos the reviewer has uploaded across Yelp. Example: `2` Date the reviewer joined Yelp (ISO date). Example: `2019-09-05` Whether the reviewer paid for a service through Yelp's payment integration. Example: `false` Whether the reviewer currently holds Yelp Elite status. Example: `true` List of years the reviewer held Yelp Elite status. Example: `[2024, 2025, 2026]` URL of the business the review is for. Example: `https://www.yelp.com/biz/olio-e-piu-new-york-7` Yelp business ID. Example: `16ZnHpuaaBt92XWeJHCC5A` Business name. Example: `Olio e Più` Average rating of the business at the time of scraping. Example: `4.5` Total number of reviews on the business at the time of scraping. Example: `7375` `false` for reviews Yelp lists under "not currently recommended" (only when `collect_not_recommended_reviews` is on), `true` for regular reviews. Example: `true` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 49687, "object": "result", "squid": "7e905dc61cfdd7df956da0871fcca9ce", "run": "af1982e76d7b14e9be9b94e217488d1f", "review_id": "E2HrRt6Pf_l2lzaB_eDc5Q", "url": "https://www.yelp.com/biz/olio-e-piu-new-york-7?hrid=E2HrRt6Pf_l2lzaB_eDc5Q", "rating": 5, "text": "Really great service, food, and ambiance!! I especially recommend the calamari appetizer.", "time_modified": "2026-04-04 10:40:18", "language": "en", "is_featured": false, "helpful_count": 12, "thanks_count": 4, "love_this_count": 8, "oh_no_count": 0, "reply_text": null, "reply_datetime": null, "reply_timestamp": null, "photo_count": 2, "photos": "https://s3-media0.fl.yelpcdn.com/bphoto/aaa/o.jpg, https://s3-media0.fl.yelpcdn.com/bphoto/bbb/o.jpg", "video_count": 0, "user_name": "Diana H.", "user_id": "KrnCBHS68nvCDyLOjC7TwQ", "user_location": "Manhattan, New York, NY", "user_review_count": 1, "user_friend_count": 12, "user_check_in_count": 0, "user_photo_count": 2, "user_member_since": "2019-09-05", "has_user_paid_through_yelp": false, "is_elite": false, "user_elite_years": null, "business_url": "https://www.yelp.com/biz/olio-e-piu-new-york-7", "business_id": "16ZnHpuaaBt92XWeJHCC5A", "business_name": "Olio e Più", "business_avg_rating": 4.5, "business_review_count": 7375, "functions": null, "native_id": 49687 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/yelp-reviews-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure the Yelp Reviews Export scraper settings Configure your Yelp Reviews Export squid settings. Filter reviews by rating, sort order, language, or keyword, and use `fetch_since` to collect only recent reviews. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum number of reviews to collect per business URL | | **max\_unique\_results\_per\_run** | integer | unlimited | Maximum unique reviews across all tasks in the run | | **sort** | string | `Yelp Sort` | Sort order: `Yelp Sort`, `Newest First`, `Oldest First`, `Highest Rated`, `Lowest Rated`, `Elites` | | **rating** | string | `All Ratings` | Filter by star rating: `All Ratings`, `5 Stars`, `4 Stars`, `3 Stars`, `2 Stars`, `1 Star` | | **language** | string | — | Filter reviews by language (ISO 639-1 code, e.g. `en`, `fr`, `de`). Leave empty to collect all languages. | | **fetch\_since** | string | — | Stop scraping when reviews older than this threshold are reached. Use a relative duration (`24h`, `7d`, `2w`) or an absolute date (`YYYY-MM-DD HH:MM:SS`). Works best with `sort: "Newest First"`. | | **term** | string | — | Keyword to search inside review text (e.g. `great service`). When set, `sort` and `rating` filters are ignored. | | **collect\_not\_recommended\_reviews** | boolean | false | Also collect the reviews Yelp hides under "reviews that are not currently recommended". They are collected first and marked `is_recommended = false`. Yelp shows fewer details for them (no votes, photos, language or member-since), and `sort` does not apply to them. | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Use `rating: "1 Star"` combined with `sort: "Newest First"` to monitor recent negative reviews for reputation management. When `term` is set, Yelp overrides the sort and rating parameters server-side — they will be ignored. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Yelp Reviews Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 500, "sort": "Newest First", "rating": "All Ratings" } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json={ "name": "Yelp Reviews Export (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 500, "sort": "Newest First", "rating": "All Ratings" } } ) data = response.json() print(f"Settings updated: {data['name']}") ``` ## Response ```json 201 theme={null} { "name": "Yelp Reviews Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 500, "sort": "Newest First", "rating": "All Ratings" } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/yelp-search-export/add-tasks POST https://api.lobstr.io/v1/tasks Add Yelp search tasks to scrape business listings Add Yelp search tasks to scrape business listings. You can provide either a Yelp search URL or use `keyword` + `location` to build the search programmatically. Crawler ID: `ac92974d3c1c9f8d3997767f090fa0b8` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the Yelp Search Export crawler | | **tasks** | array | Yes | Array of task objects | ## Task Object You can either pass a `url` or use `keyword` + `location` (with optional `country`): | Field | Type | Required | Description | | - | - | - | - | | **url** | string | No | Full Yelp search URL (e.g., `https://www.yelp.com/search?find_desc=Restaurants&find_loc=New+York`) | | **keyword** | string | No | What you're looking for (business category or search term). Example: `Italian restaurant` | | **location** | string | No | City or area to search in. Example: `New York, NY` | | **country** | string | No | Country to scope the location list. Leave empty to use top worldwide cities | Either `url` or `keyword` + `location` is required. When using `keyword` and `location`, filters set in the squid settings (price, sort, distance, etc.) are applied automatically. To use advanced Yelp filters (cuisine type, outdoor seating, etc.), apply them on Yelp's website first and then copy the resulting URL. ## Code Examples ```bash cURL (URL) theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.yelp.com/search?find_desc=Restaurants&find_loc=New+York%2C+NY" } ] }' ``` ```bash cURL (keyword + location) theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "keyword": "Italian restaurant", "location": "New York, NY", "country": "US" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Option 1: use a full Yelp URL payload = { "squid": squid_id, "tasks": [ {"url": "https://www.yelp.com/search?find_desc=Restaurants&find_loc=New+York%2C+NY"} ] } # Option 2: use keyword + location (filters from squid settings apply) payload = { "squid": squid_id, "tasks": [ {"keyword": "Italian restaurant", "location": "New York, NY", "country": "US"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "keyword": "Italian restaurant", "location": "New York, NY", "country": "US" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/yelp-search-export/credit-cost Credit cost for the Yelp Search Export | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 1 | 1 credit per business. | | Collect Contacts | 1 | 1 credit per business if any email address is found. No email found = 0 credits. | # Get Results Source: https://docs.lobstr.io/examples/yelp-search-export/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Yelp Search Export Retrieve scraped data from your **Yelp Search Export** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Direct URL to the business listing on Yelp. Example: `https://www.yelp.com/biz/vega-vitality-back-bay-boston-2?osq=Spa` Business name as listed on Yelp. Example: `Vega Vitality Back Bay` Total number of customer reviews on Yelp. Example: `97` Average Yelp rating out of 5. Example: `4.8` Whether the business is permanently closed on Yelp. Example: `false` Whether the business has claimed its Yelp listing. Example: `true` Price range indicator on Yelp (e.g. \$, $, $$$). Example: `$\` Business categories on Yelp (e.g. Italian, Pizza). Example: `Medical Spas, Skin Care, Dermatologists` Business website URL. Example: `http://vegavitality.com` Primary phone number of the business. Example: `(617) 658-3421` URL to the business's menu on its own website. Example: `https://vegavitality.com/pricing/` URL to the business's menu page on Yelp Full formatted address of the business. Example: `551 Boylston St, Fl 4, Boston, MA 02116` Latitude coordinate of the business. Example: `42.350756` Longitude coordinate of the business. Example: `-71.076037` Amenities and features offered by the business as listed on Yelp. Example: `By appointment only, Wheelchair accessible, Accessible parking near entrance, ADA-compliant main entrance, No steps or stairs, Accepts credit cards, Garage parking, Street parking, Free Wi-Fi, Women-owned, Bike parking` Email address of the business. Example: `info@vegavitality.com` Whether the business is an advertiser on Yelp. Example: `false` Whether the listing appears as a sponsored result on Yelp. Example: `false` ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 28248, "object": "result", "squid": "3b1be7b728c671f3e7ad20d9205127ce", "run": "bd19be3f06ac76e1a6ec86e60989191b", "url": "https://www.yelp.com/biz/vega-vitality-back-bay-boston-2?osq=Spa", "name": "Vega Vitality Back Bay", "reviews": 97, "score": 4.8, "is_closed": false, "is_claimed": null, "price": "$$", "categories": "Medical Spas, Skin Care, Dermatologists", "website": "http://vegavitality.com", "phone": "(617) 658-3421", "website_menu": null, "yelp_menu": null, "address": "551 Boylston St, Fl 4, Boston, MA 02116", "lat": 42.350756, "lng": -71.076037, "amenities": "By appointment only, Wheelchair accessible, Accessible parking near entrance, ADA-compliant main entrance, No steps or stairs, Accepts credit cards, Garage parking, Street parking, Free Wi-Fi, Women-owned, Bike parking", "email": "info@vegavitality.com", "advertiser_status": false, "is_sponsored": false, "functions": null, "native_id": 28248 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/yelp-search-export/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Yelp Search Export scraper settings Configure your Yelp Search Export squid settings. Control result limits, contact harvesting, and search filters such as price range, distance, and business amenities. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | 240 | Maximum number of businesses to collect per task. Yelp displays up to 240 results per search | | **max\_unique\_results\_per\_run** | integer | null | Maximum unique results across all tasks in the entire run | | **collect\_contacts** | boolean | true | Visit each business's website to extract email addresses and social links (1 credit per business) | | **sort** | string | Recommended | How results are ordered: `Recommended`, `Highest Rated`, or `Review Count` | | **distance** | string | Any Distance | Maximum search radius: `Any Distance`, `Bird's-eye View`, `Driving (25 mi.)`, `Biking (6 mi.)`, `Walking (1 mi.)`, or `Within 4 blocks` | | **price\_1** | boolean | false | Include businesses with price level \$ (inexpensive) | | **price\_2** | boolean | false | Include businesses with price level \$\$ (moderate) | | **price\_3** | boolean | false | Include businesses with price level \$\$\$ (pricey) | | **price\_4** | boolean | false | Include businesses with price level \$\$\$\$ (very expensive) | | **hot\_and\_new** | boolean | false | Only show businesses tagged as Hot and New by Yelp | | **open\_now** | boolean | false | Only show businesses that are open at the time of the search | | **good\_for\_kids** | boolean | false | Only show businesses marked as good for kids | | **good\_for\_groups** | boolean | false | Only show businesses marked as good for groups | | **free\_wifi** | boolean | false | Only show businesses that offer free Wi-Fi | | **dogs\_allowed** | boolean | false | Only show businesses that allow dogs | | **wheelchair\_accessible** | boolean | false | Only show businesses that are wheelchair accessible | | **open\_to\_all** | boolean | false | Only show businesses tagged as open to all | | **accepts\_credit\_cards** | boolean | false | Only show businesses that accept credit cards | | **accepts\_cryptocurrency** | boolean | false | Only show businesses that accept cryptocurrency | | **accepts\_apple\_pay** | boolean | false | Only show businesses that accept Apple Pay | | **offers\_military\_discount** | boolean | false | Only show businesses that offer a military discount | | **min\_star\_rating** | float | null | Only show businesses with at least this star rating (e.g. `3.5`, `4.0`) | | **min\_reviews** | integer | null | Only show businesses with at least this many reviews | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Filter parameters (`price_1`, `open_now`, etc.) apply when tasks use `keyword` + `location` as input. When a full URL is provided, Yelp applies the filters embedded in that URL instead. Enable `collect_contacts` to extract email addresses from business websites for outreach campaigns. Enabling `collect_contacts` adds extra HTTP requests per business, increasing total run time and credit usage. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Yelp Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 240, "collect_contacts": true, "sort": "Highest Rated", "distance": "Driving (25 mi.)", "price_1": true, "price_2": true, "open_now": false, "good_for_kids": false } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" payload = { "name": "Yelp Search Export (1)", "concurrency": 1, "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": { "max_results": 240, "collect_contacts": True, "sort": "Highest Rated", "distance": "Driving (25 mi.)", "price_1": True, "price_2": True, "open_now": False, "good_for_kids": False } } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "Yelp Search Export (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": { "max_results": 240, "collect_contacts": true, "sort": "Highest Rated", "distance": "Driving (25 mi.)", "price_1": true, "price_2": true, "open_now": false, "good_for_kids": false } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/youtube-channel-email-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add YouTube channel URLs to scrape contact emails Add YouTube channel URLs to scrape contact information including email addresses, social media links, and channel statistics. The scraper extracts data from the channel's About page. Crawler ID: `8dce74bb8c2330fdafee70baa22b4709` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Request Body | Field | Type | Required | Description | | - | - | - | - | | **squid** | string | Yes | Hash of your squid configured with the YouTube Channel Email Scraper | | **tasks** | array | Yes | Array of task objects, each containing a `url` field | ## Task Object | Field | Type | Required | Description | | - | - | - | - | | **url** | string | Yes | YouTube channel URL (e.g., `https://www.youtube.com/c/ChannelName` or `https://www.youtube.com/@handle`) | ## Supported URL Formats The scraper accepts various YouTube channel URL formats: | Format | Example | | - | - | | Custom URL | `https://www.youtube.com/c/ChannelName` | | Handle URL | `https://www.youtube.com/@channelhandle` | | Channel ID | `https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxx` | | User URL | `https://www.youtube.com/user/username` | You can use any YouTube channel URL format - the scraper will resolve it to the correct channel. Email addresses are only available if the channel owner has made them public in the About section. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ { "url": "https://www.youtube.com/c/TechLegend" } ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Add YouTube channel URLs to scrape payload = { "squid": squid_id, "tasks": [ {"url": "https://www.youtube.com/c/TechLegend"}, {"url": "https://www.youtube.com/@mkbhd"}, {"url": "https://www.youtube.com/channel/UCBcRF18a7Qf58cCRy5xuWwQ"} ] } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload ) data = response.json() print(f"Added {len(data['tasks'])} tasks") print(f"Duplicates skipped: {data['duplicated_count']}") ``` ## Response ```json 200 theme={null} { "duplicated_count": 0, "tasks": [ { "id": "82367f24d9450b2222080eed91662968", "created_at": "2025-07-17T09:06:47.287893", "is_active": true, "params": { "url": "https://www.youtube.com/c/TechLegend" }, "module": 115, "object": "task" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/youtube-channel-email-scraper/credit-cost Credit cost for the YouTube Channel Scraper 1 credit per channel. # Get Results Source: https://docs.lobstr.io/examples/youtube-channel-email-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from YouTube Channel Scraper Retrieve scraped data from your **YouTube Channel Email Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1). Example: `1` ## Result Fields Each result object contains the following fields: Unique YouTube channel identifier. Example: `UCmYFWvTSYR7nTUsxGYMowMg` Email address found on the YouTube channel or linked website. Example: `dianalarusse@yandex.ru` Total number of videos published on the channel. Example: `1,611 videos` YouTube channel display name. Example: `Le russe facile avec Diana` Total number of views across all channel videos. Example: `33761771` Total number of channel subscribers as text (handy for display, but not sortable). Example: `183K` Total number of channel subscribers as an exact integer, so results can be sorted and filtered. `0` for an empty channel. Example: `183000` Date the YouTube channel was created. Example: `2017-02-16` URL of the channel's banner image. Empty when the channel has no banner. Whether the channel has YouTube's verified (or Official Artist Channel) badge. Example: `true` Where the email was found: `channel` when it came from the channel's About tab, `video_descriptions` when it was extracted from a video description (including obfuscated forms like `name [at] domain.com`). Empty when no email was found. Example: `channel` Country associated with the YouTube channel. Example: `France` Instagram profile URL found on the YouTube channel. Example: `https://www.instagram.com/russe_facile_avec_diana/` Twitter/X profile URL found on the YouTube channel Facebook page URL found on the YouTube channel. Example: `https://www.facebook.com/LeRusseFacileAvecDiana/` About text from the YouTube channel's About tab. Example: \`Vidéos sur la Russie et cours de russe même pour les « nuls en langues » 😉 Je m'appelle Diana et je suis une Russe native et professeur certifié de russe, de français et d'allemand. J'ai aidé des milliers de personnes à apprendre ma langue natale. Et je peux vous aider à le faire 👍 Je base mes cours sur les principes de la psychologie positive pour que vous associez l'apprentissage du russe à quelque chose d'agréable et cela vous donne envie de continuer sans vous ennuyer. J'espère que nous allons passer de bons moments ensemble ! Pour progresser plus rapidement en russe: [https://russe-facile-avec-diana.teachable.com](https://russe-facile-avec-diana.teachable.com) Pour me contacter: [https://www.facebook.com/LeRusseAvecDiana/](https://www.facebook.com/LeRusseAvecDiana/) [dianalarusse@yandex.ru](mailto:dianalarusse@yandex.ru)\` URL slug or handle of the YouTube channel (e.g. @channelname). Example: `LerussefacileavecDiana` Direct URL to the YouTube channel. Example: `https://www.youtube.com/@LerussefacileavecDiana` URL of the channel's avatar or profile picture. Example: `https://yt3.googleusercontent.com/ytc/AIdro_lHG5KkuRZ80KItJH-v9LuueXEsf4Oz2jboUw9591vG73A=s900-c-k-c0x00ffffff-no-rj` Other external links listed in the YouTube channel's About section. Example: `https://russe-facile-avec-diana.teachable.com/, https://www.paypal.me/dianarussie, https://www.tiktok.com/@russe_facile_avec_diana` Up to 30 of the channel's most recent uploaded videos (title, URL, view count, published date, duration, thumbnail). Only populated when `get_videos` is enabled. Up to 30 of the channel's most recent Shorts (title, URL, view count, thumbnail). Only populated when `get_shorts` is enabled. Up to 30 of the channel's live and past streams (title, URL, view count, duration, thumbnail). Only populated when `get_streams` is enabled; empty if the channel has no Live tab. Up to 30 of the channel's public playlists (title, URL, video count, thumbnail). Only populated when `get_playlists` is enabled. Comments (up to 50 top-level + one reply page per thread) for up to 5 videos/Shorts. Only populated when `get_comments` is enabled alongside `get_videos` or `get_shorts`. ## Response ```json 200 theme={null} { "total_results": 1, "limit": 50, "page": 1, "total_pages": 1, "result_from": 1, "result_to": 1, "data": [ { "id": 66816, "object": "result", "squid": "cb3ba78d76b4ef7455cf868304a44c87", "run": "5683316cb99bde3abed3687f42257b85", "channel_id": "UCmYFWvTSYR7nTUsxGYMowMg", "email": "dianalarusse@yandex.ru", "videos_count": "1,611 videos", "account_name": "Le russe facile avec Diana", "views_count": 33761771, "subscribers_count": "183K", "creation_date": "2017-02-16", "country": "France", "instagram": "https://www.instagram.com/russe_facile_avec_diana/", "twitter": null, "facebook": "https://www.facebook.com/LeRusseFacileAvecDiana/", "about": "Vidéos sur la Russie et cours de russe même pour les « nuls en langues » 😉\n\nJe m'appelle Diana et je suis une Russe native et professeur certifié de russe, de français et d'allemand. J'ai aidé des milliers de personnes à apprendre ma langue natale. Et je peux vous aider à le faire 👍\n\nJe base mes cours sur les principes de la psychologie positive pour que vous associez l'apprentissage du russe à quelque chose d'agréable et cela vous donne envie de continuer sans vous ennuyer.\n\nJ'espère que nous allons passer de bons moments ensemble !\n\nPour progresser plus rapidement en russe: https://russe-facile-avec-diana.teachable.com\n\nPour me contacter: \nhttps://www.facebook.com/LeRusseAvecDiana/", "slug": "LerussefacileavecDiana", "url": "https://www.youtube.com/@LerussefacileavecDiana", "avatar_url": "https://yt3.googleusercontent.com/ytc/AIdro_lHG5KkuRZ80KItJH-v9LuueXEsf4Oz2jboUw9591vG73A=s900-c-k-c0x00ffffff-no-rj", "other_links": "https://russe-facile-avec-diana.teachable.com/, https://www.paypal.me/dianarussie, https://www.tiktok.com/@russe_facile_avec_diana", "videos": [ { "id": "Af6i6ChAVTw", "type": "LOCKUP_CONTENT_TYPE_VIDEO", "title": "Last To Leave Mansion, Keeps It", "url": "https://www.youtube.com/watch?v=Af6i6ChAVTw", "thumbnail_url": "https://i.ytimg.com/vi/Af6i6ChAVTw/hqdefault.jpg", "duration_text": "57:51", "metadata_text": [ "62M views", "3 days ago" ] } ], "shorts": [ { "id": "LiH-P4rSkLI", "type": "LOCKUP_CONTENT_TYPE_SHORT", "title": "Can You Pass This Classroom Quiz?", "url": "https://www.youtube.com/shorts/LiH-P4rSkLI", "thumbnail_url": "https://i.ytimg.com/vi/LiH-P4rSkLI/sardefault.jpg", "duration_text": null, "metadata_text": [ "16M views" ] } ], "streams": [ { "id": "xpH9wtJuOHk", "type": "LOCKUP_CONTENT_TYPE_VIDEO", "title": "LIVE: ABC News Live - Tuesday, August 11 | ABC News", "url": "https://www.youtube.com/watch?v=xpH9wtJuOHk", "thumbnail_url": "https://i.ytimg.com/vi/xpH9wtJuOHk/hqdefault.jpg", "duration_text": "11:54:56", "metadata_text": [ "46K views", "Streamed 12 hours ago" ] } ], "playlists": [ { "id": "PLoSWVnSA9vG8hI-SUpAimvYJrPh-PRRvp", "type": "LOCKUP_CONTENT_TYPE_PLAYLIST", "title": "If You Survive, You Win", "url": "https://www.youtube.com/playlist?list=PLoSWVnSA9vG8hI-SUpAimvYJrPh-PRRvp", "thumbnail_url": "https://i.ytimg.com/vi/tnTPaLOaHz8/hqdefault.jpg", "duration_text": "6 episodes", "metadata_text": [ "Updated 3 days ago" ] } ], "comments": [ { "comment_id": "UgzABC123", "text": "This is amazing!", "author": "SomeUser", "author_channel_id": "UCabc123", "author_profile_url": "https://www.youtube.com/channel/UCabc123", "author_avatar": "https://yt3.ggpht.com/abc123", "author_is_channel_owner": false, "author_is_verified": false, "author_badge": null, "published_time_text": "2 days ago", "published_at": null, "vote_count": 214, "reply_count": 3, "has_creator_heart": false, "is_pinned": false, "type": "comment", "reply_to_comment_id": null, "video_id": "Af6i6ChAVTw", "video_url": "https://www.youtube.com/watch?v=Af6i6ChAVTw", "video_title": "Last To Leave Mansion, Keeps It", "comments_count": 15234, "channel_name": "MrBeast", "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA" } ], "functions": null, "native_id": 66816 } ], "next": null, "previous": null } ``` # Update Settings Source: https://docs.lobstr.io/examples/youtube-channel-email-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure YouTube Channel Scraper settings Configure your YouTube Channel Email Scraper squid settings. Use the scraper parameters to control which content types are collected per channel. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **get\_videos** | boolean | false | Collect up to 30 of the channel's most recent uploaded videos (title, URL, view count, published date, duration, thumbnail) | | **get\_shorts** | boolean | false | Collect up to 30 of the channel's most recent Shorts (title, URL, view count, thumbnail) | | **get\_streams** | boolean | false | Collect up to 30 of the channel's live and past streams (title, URL, view count, duration, thumbnail) | | **get\_playlists** | boolean | false | Collect up to 30 of the channel's public playlists (title, URL, video count, thumbnail) | | **get\_comments** | boolean | false | Collect comments for up to 5 of the videos/Shorts gathered by `get_videos`/`get_shorts` (up to 50 top-level comments + one reply page per thread). Requires `get_videos` or `get_shorts` to be enabled. | ## Squid Settings Configure general squid settings: | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid configuration | | **concurrency** | integer | Number of parallel scraping threads (default: 1) | | **export\_unique\_results** | boolean | Export only unique results (deduplicated) | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from results | Keep concurrency low (1-2) to avoid rate limiting from YouTube. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "YouTube Channel Email Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": {} }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" # Update squid settings payload = { "name": "YouTube Channel Email Scraper (1)", "concurrency": 1, # Keep low to avoid rate limiting "export_unique_results": True, "to_complete": False, "no_line_breaks": True, "params": {} # No scraper-specific parameters } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload ) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "YouTube Channel Email Scraper (1)", "concurrency": 1, "export_unique_results": true, "to_complete": false, "no_line_breaks": true, "params": {} } ``` # Add Tasks Source: https://docs.lobstr.io/examples/youtube-comments-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add YouTube video URLs to scrape comments from Crawler ID: `66e9fbe07ae0a543576dc6ff241c229c` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash of the squid to add tasks to Array of task objects to add YouTube video URL. Example: `https://www.youtube.com/watch?v=dQw4w9WgXcQ` ## URL Format The `url` field accepts standard YouTube video URLs: ``` https://www.youtube.com/watch?v=VIDEO_ID https://youtu.be/VIDEO_ID ``` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}, {"url": "https://www.youtube.com/watch?v=ANOTHER_VIDEO_ID"} ] }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"} squid_id = "YOUR_SQUID_HASH" video_urls = [ "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://www.youtube.com/watch?v=ANOTHER_VIDEO_ID", ] payload = { "squid": squid_id, "tasks": [{"url": url} for url in video_urls], } response = requests.post(f"{BASE_URL}/tasks", headers=headers, json=payload) print(f"Tasks added: {len(response.json().get('tasks', []))}") ``` ## Response ```json 201 theme={null} { "tasks": [ { "id": "TASK_HASH", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "status": "pending" } ] } ``` # Credit Cost Source: https://docs.lobstr.io/examples/youtube-comments-scraper/credit-cost Credit cost for the YouTube Comments Scraper 0.5 credit per comment. Add YouTube video URLs to your **YouTube Comments Scraper** squid. Each task is one video; the scraper collects all top-level comments (and their replies if enabled) for that video. # Get Results Source: https://docs.lobstr.io/examples/youtube-comments-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped comments from YouTube Comments Scraper Retrieve comments collected by your **YouTube Comments Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Hash of a specific run (optional) Page number (default: 1) ## Result Fields Unique YouTube comment ID. Example: `UgxZf7BbcN3mJlQkfvt4AaABAg` Full text content of the comment. Example: `This video is amazing, learned so much!` Display name of the comment author. Example: `John Doe` YouTube channel ID of the author. Example: `UCxxxxxxxxxxxxxxxxxxxxxx` URL to the author's YouTube channel. Example: `https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx` URL to the author's profile picture. Example: `https://yt3.ggpht.com/...` Whether the commenter is the video's channel owner. Example: `false` Whether the author's channel is verified. Example: `false` Membership or sponsorship badge label, if any. Example: `null` Human-readable relative publish time as shown on YouTube. Example: `2 years ago` ISO 8601 timestamp of when the comment was published, if available. Example: `2022-08-15T14:30:00Z` Number of likes on the comment. Example: `342` Number of replies to this top-level comment. Always `0` for replies. Example: `12` Whether the video creator hearted this comment. Example: `false` Whether this comment is pinned at the top. Example: `false` Comment type: `comment` for top-level or `reply` for a reply. Example: `comment` The `comment_id` of the parent comment this is a reply to. `null` for top-level comments. Example: `null` YouTube video ID the comment belongs to. Example: `dQw4w9WgXcQ` Full URL of the video. Example: `https://www.youtube.com/watch?v=dQw4w9WgXcQ` Title of the video. Example: `Rick Astley - Never Gonna Give You Up (Official Music Video)` Total number of comments on the video. Example: `2400000` Name of the channel that uploaded the video. Example: `Rick Astley` YouTube channel ID of the video uploader. Example: `UCuAXFkgsw1L7xaCfnd5JJOw` ## Code Examples ```bash cURL theme={null} curl "https://api.lobstr.io/v1/results?squid=YOUR_SQUID_HASH&page=1" \ -H "Authorization: Token YOUR_API_KEY" ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}"} squid_id = "YOUR_SQUID_HASH" page = 1 all_results = [] while True: response = requests.get( f"{BASE_URL}/results", headers=headers, params={"squid": squid_id, "page": page}, ) data = response.json() all_results.extend(data.get("results", [])) if not data.get("next"): break page += 1 print(f"Total comments collected: {len(all_results)}") ``` ## Response ```json 200 theme={null} { "count": 2, "next": null, "previous": null, "results": [ { "comment_id": "UgxZf7BbcN3mJlQkfvt4AaABAg", "text": "This song never gets old.", "author": "Jane Smith", "author_channel_id": "UCxxxxxxxxxxxxxxxxxxxxxx", "author_profile_url": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx", "author_avatar": "https://yt3.ggpht.com/example", "author_is_channel_owner": false, "author_is_verified": false, "author_badge": null, "published_time_text": "3 years ago", "published_at": "2021-06-10T09:15:00Z", "vote_count": 1204, "reply_count": 45, "has_creator_heart": false, "is_pinned": false, "type": "comment", "reply_to_comment_id": null, "video_id": "dQw4w9WgXcQ", "video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "video_title": "Rick Astley - Never Gonna Give You Up (Official Music Video)", "comments_count": 2400000, "channel_name": "Rick Astley", "channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw" }, { "comment_id": "UgxZf7BbcN3mJlQkfvt4AaABAg.9k2mLpQvX3z", "text": "Agreed, timeless classic.", "author": "John Doe", "author_channel_id": "UCyyyyyyyyyyyyyyyyyyyyyy", "author_profile_url": "https://www.youtube.com/channel/UCyyyyyyyyyyyyyyyyyyyyyy", "author_avatar": "https://yt3.ggpht.com/example2", "author_is_channel_owner": false, "author_is_verified": false, "author_badge": null, "published_time_text": "3 years ago", "published_at": "2021-06-11T10:02:00Z", "vote_count": 8, "reply_count": 0, "has_creator_heart": false, "is_pinned": false, "type": "reply", "reply_to_comment_id": "UgxZf7BbcN3mJlQkfvt4AaABAg", "video_id": "dQw4w9WgXcQ", "video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "video_title": "Rick Astley - Never Gonna Give You Up (Official Music Video)", "comments_count": 2400000, "channel_name": "Rick Astley", "channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw" } ] } ``` # Update Settings Source: https://docs.lobstr.io/examples/youtube-comments-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure YouTube Comments Scraper settings Configure your **YouTube Comments Scraper** squid. Control sorting, reply collection, date filtering, and result limits. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Request body format. Value: `application/json` ## Scraper Parameters Set these parameters in the `params` object: | Parameter | Type | Default | Description | | - | - | - | - | | **max\_results** | integer | unlimited | Maximum comments to collect per video | | **max\_unique\_results\_per\_run** | integer | null | Maximum unique comments across all tasks in the run | | **sort\_by** | string | `top` | Comment sort order: `top` (most liked first) or `newest` (most recent first) | | **skip\_pinned\_comment** | boolean | false | Skip the pinned comment at the top of the thread | | **include\_replies** | boolean | true | Collect replies to top-level comments | | **max\_replies** | integer | unlimited | Maximum replies to collect per comment. Only applies when `include_replies` is `true` | | **fetch\_since** | string | null | Only collect comments published after this date. Accepts `YYYY-MM-DD HH:MM:SS` or a relative value (`24h`, `7d`, `30d`) | | **fetch\_since\_timezone** | string | UTC | Timezone for `fetch_since`. Example: `Europe/Paris` | ## Squid Settings | Setting | Type | Description | | - | - | - | | **name** | string | Display name for your squid | | **concurrency** | integer | Number of parallel tasks (default: 1) | | **export\_unique\_results** | boolean | Export only unique comments | | **to\_complete** | boolean | Run until all tasks complete | | **no\_line\_breaks** | boolean | Remove line breaks from text fields | `max_replies` is only relevant when `include_replies` is `true`. Set it to cap reply collection on highly-commented threads. ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "YouTube Comments (1)", "concurrency": 1, "params": { "sort_by": "top", "include_replies": true, "max_replies": 50, "skip_pinned_comment": false, "fetch_since": "7d" } }' ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.lobstr.io/v1" headers = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"} squid_id = "YOUR_SQUID_HASH" payload = { "name": "YouTube Comments (1)", "concurrency": 1, "params": { "sort_by": "top", "include_replies": True, "max_replies": 50, "skip_pinned_comment": False, "fetch_since": "7d", }, } response = requests.post(f"{BASE_URL}/squids/{squid_id}", headers=headers, json=payload) print(f"Settings updated: {response.json()['name']}") ``` ## Response ```json 201 theme={null} { "name": "YouTube Comments (1)", "concurrency": 1, "params": { "sort_by": "top", "include_replies": true, "max_replies": 50, "skip_pinned_comment": false, "fetch_since": "7d" } } ``` # Add Tasks Source: https://docs.lobstr.io/examples/youtube-search-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your YouTube Search Scraper squid Add URLs or inputs to your **YouTube Search Scraper** squid. Crawler ID: `2bfd28f2e9d6012d6d557072fda474da` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields A YouTube video URL, a YouTube channel URL (@handle, /c/Name, /channel/UC..., /user/Name, or a bare custom URL -- optionally with a /videos, /shorts, /streams, or /playlists suffix to list that tab instead of the channel's profile), a hashtag URL, a playlist URL, a YouTube search-results URL, or just plain search-query text. Anything not recognized as a supported YouTube URL is searched verbatim, exactly like typing it into YouTube's search bar (this deliberately includes non-YouTube URLs, e.g. "google.com" is searched as text, not rejected). Example: `https://www.youtube.com/watch?v=dQw4w9WgXcQ` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url/keyword": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "YOUR_SQUID_HASH", "tasks": [ {"url/keyword": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url/keyword": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/youtube-search-scraper/credit-cost Credit cost for the YouTube Search Scraper 1 credit per result row. The `get_comments`, `get_subtitles` and `enrich_results` options add no extra credits. # Get Results Source: https://docs.lobstr.io/examples/youtube-search-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from YouTube Search Scraper Retrieve scraped data from your **YouTube Search Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY`. ## Query Parameters Hash of the squid to get results from. Page number (default: 1). ## Result Fields ### Export Results What this row represents: 'video', 'channel', 'short', 'stream', or 'playlist'. Example: `video` YouTube's own identifier for this video, channel, or playlist -- unique on its own since video/channel/playlist id formats never collide. Example: `dQw4w9WgXcQ` Video title, or channel display name for a channel row. Example: `Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)` Direct URL to the video or channel. Example: `https://www.youtube.com/watch?v=dQw4w9WgXcQ` Video thumbnail, or channel avatar for a channel row. Example: `https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg` Full video description, or full channel About text for a channel row. Example: `The official video for “Never Gonna Give You Up” by Rick Astley.` Hashtags found on the video. Empty for a channel row or a search-listing video row (only populated when the video itself was fetched directly). Example: `["#RickAstley", "#NeverGonnaGiveYouUp"]` Exact publish date. Only populated when the video itself was fetched directly -- a search-listing row only has published\_time\_text (see below). Example: `2009-10-24T23:57:33-07:00` Approximate, relative publish time as shown on a search-listing row. Only populated for search-listing video rows. Example: `14 years ago` Exact video duration in seconds. Only populated when the video itself was fetched directly. Example: `213` Video duration as shown on a search-listing row (e.g. "3:32"). Only populated for search-listing video rows. Example: `3:32` Exact view count when the video was fetched directly; parsed from listing text otherwise. bigint -- some videos already exceed the \~2.147B int32 range. Example: `1805080053` View count as shown on a search-listing row. Only populated for search-listing video rows. Example: `48,467,121 views` Exact like count. Only populated when the video itself was fetched directly -- not available on a search-listing row at all. bigint -- some videos already exceed the \~2.147B int32 range. Example: `19337903` Approximate comment count text. YouTube exposes no exact comment count anywhere. Only populated when the video itself was fetched directly. Example: `2.4M` Channel identifier -- the video's channel, or the channel itself for a channel row. Example: `UCuAXFkgsw1L7xaCfnd5JJOw` Channel display name. Example: `Rick Astley` Direct URL to the channel. Example: `https://www.youtube.com/@RickAstleyYT` Channel avatar. On a video row this is the small avatar shown next to the video; on a channel row it's the same as thumbnail\_url. Example: `https://yt3.ggpht.com/example=s88-c-k-c0x00ffffff-no-rj` Whether the channel has YouTube's verified (or Official Artist Channel) badge. Example: `True` Approximate subscriber count text -- YouTube exposes no exact subscriber count anywhere. Example: `4.53M subscribers` Channel banner image. Only populated for a channel row. Example: `https://yt3.googleusercontent.com/example=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj` Channel handle. Only populated for a channel row. Example: `@MrBeast` Approximate total video count text. Only populated for a channel row. Example: `997 videos` Channel's claimed country, from its About tab. Only populated for a channel row. Example: `United States` Date the channel joined YouTube, from its About tab. Only populated for a channel row. Example: `2012-02-20` External/social links listed on the channel's About tab. Only populated for a channel row. Example: `["https://www.instagram.com/mrbeast/", "https://x.com/MrBeast"]` Whether the video is currently a live broadcast. Example: `False` Whether the video is an upcoming/scheduled premiere. Only populated when the video itself was fetched directly. Example: `False` Live broadcast start time, if is\_live is true. Only populated when the video itself was fetched directly. Whether the video has any captions/subtitles (auto-generated or user-added). Only populated when the video itself was fetched directly. Example: `True` Language codes of the video's available caption tracks. Only populated when the video itself was fetched directly. Example: `["en", "de-DE"]` Video category. Only populated when the video itself was fetched directly. Example: `Music` Whether the video or channel is flagged family-safe by YouTube. Example: `True` Whether the video is unlisted. Only populated when the video itself was fetched directly. Example: `False` The task's original input string (URL or search text) that produced this row. Example: `rick astley` 1-based position of this row within its task's results (always 1 for a video/channel URL task). Example: `1` ### Get Comments First page of top-level comments (up to 10). Only populated when Get Comments is enabled. Example: `[{"comment_id": "UgzABC123", "author": "@SomeUser", "author_channel_id": "UCabc123", "text": "This is amazing!", "published_time_text": "2 days ago", "vote_count": 214}]` ### Get Subtitles Language code of the caption track subtitles\_text was fetched from. Only populated when Get Subtitles is enabled. Example: `en` Transcript text of one caption track (see subtitles\_language). Only populated when Get Subtitles is enabled, and empty if the video has no captions. Example: `[Music playing] Welcome back to the channel...` ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=YOUR_SQUID_HASH" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "YOUR_SQUID_HASH", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"result_type": "video", "content_id": "dQw4w9WgXcQ", "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "description": "The official video for \u201cNever Gonna Give You Up\u201d by Rick Astley.", "hashtags": ["#RickAstley", "#NeverGonnaGiveYouUp"], "published_at": "2009-10-24T23:57:33-07:00", "published_time_text": "14 years ago", "duration_seconds": 213}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/youtube-search-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure YouTube Search Scraper settings Configure your **YouTube Search Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | max\_unique\_results\_per\_run | int | — | Maximum number of unique results retrieved across all tasks in the entire run. Leave empty for unlimited. Only meaningful for a search/listing task -- a video or channel URL always returns exactly one row. | | max\_results | integer | — | Maximum number of videos to collect for a single search task, paginating as needed. Leave empty to collect as many as YouTube returns. Only meaningful for a search/listing task -- a video or channel URL always returns exactly one row. | | type | string | — | Only for a search/plain-text task (ignored for a pasted search-results URL that already has its own filter, and for hashtag/playlist/channel-tab tasks). Restrict results to one content type. One of: `video`, `short`, `channel`, `playlist`, `movie`. | | upload\_date | string | — | Only for a search/plain-text task. Restrict results to videos uploaded within this window. One of: `today`, `this_week`, `this_month`, `this_year`. | | duration | string | — | Only for a search/plain-text task. Restrict results by video length. One of: `under_4_minutes`, `4_to_20_minutes`, `over_20_minutes`. | | live | boolean | false | Only for a search/plain-text task. Restrict results to currently-live broadcasts. | | sort | string | `relevance` | Only for a search/plain-text task. YouTube's own search only offers these two today -- "upload date" and "rating" sort options some older tools reference no longer do anything. One of: `relevance`, `popularity`. | | subtitles | boolean | false | Only for a search/plain-text task. Restrict results to videos with subtitles or closed captions. | | hd | boolean | false | Only for a search/plain-text task. Restrict results to HD video. | | four\_k | boolean | false | Only for a search/plain-text task. Restrict results to 4K video. | | hdr | boolean | false | Only for a search/plain-text task. Restrict results to HDR video. | | three\_sixty | boolean | false | Only for a search/plain-text task. Restrict results to 360° video. | | vr180 | boolean | false | Only for a search/plain-text task. Restrict results to VR180 video. | | three\_d | boolean | false | Only for a search/plain-text task. Restrict results to 3D video. | | creative\_commons | boolean | false | Only for a search/plain-text task. Restrict results to Creative Commons-licensed video. | | enrich\_results | boolean | false | For a search, hashtag, playlist, or channel-tab task: fetch each video/Short/stream directly too, filling in the fields a listing alone doesn't have (full description, hashtags, exact view/like counts, captions, ...). One extra request per result -- off by default to keep a listing task cheap. | | get\_comments | boolean | false | Collect the first page of top-level comments (up to 10) for a video. Applies directly to a video-URL task, and to a search/hashtag/playlist/channel-tab task only when Enrich Results is also on (comments require the same per-video fetch enrichment already does). One extra request per video on top of that. | | get\_subtitles | boolean | false | Download the transcript text of one caption track for a video. Applies directly to a video-URL task, and to a search/hashtag/playlist/channel-tab task's video/Short/stream items only when Enrich Results is also on. Each fetch needs a real browser session (seconds to minutes) -- fine for a handful of videos, genuinely slow across a large listing. Empty if the video has no captions. | | subtitle\_language | string | — | Only used when Get Subtitles is on. YouTube's own language code for the caption track to download -- see the result's caption\_languages field for what a given video actually offers. Left blank, whichever language the video's captions default to is used. If the requested language isn't available for a video, falls back to the default rather than failing. One of: `en`, `en-US`, `en-GB`, `en-CA`, `en-AU`, `en-IN`, `es`, `es-ES`, `es-419`, `es-US`, `fr`, `fr-FR`, `fr-CA`, `de`, `de-DE`, `de-AT`, `de-CH`, `it`, `it-IT`, `pt`, `pt-BR`, `pt-PT`, `nl`, `nl-NL`, `ru`, `ru-RU`, `ja`, `ja-JP`, `ko`, `ko-KR`, `zh-Hans`, `zh-Hant`, `zh-CN`, `zh-TW`, `zh-HK`, `ar`, `ar-SA`, `hi`, `hi-IN`, `bn`, `bn-IN`, `bn-BD`, `id`, `id-ID`, `vi`, `vi-VN`, `th`, `th-TH`, `tr`, `tr-TR`, `pl`, `pl-PL`, `sv`, `sv-SE`, `da`, `da-DK`, `no`, `nb`, `nn`, `fi`, `fi-FI`, `el`, `el-GR`, `he`, `he-IL`, `cs`, `cs-CZ`, `ro`, `ro-RO`, `hu`, `hu-HU`, `uk`, `uk-UA`, `bg`, `bg-BG`, `sk`, `sk-SK`, `hr`, `hr-HR`, `sr`, `sr-RS`, `sl`, `sl-SI`, `lt`, `lt-LT`, `lv`, `lv-LV`, `et`, `et-EE`, `fil`, `fil-PH`, `ms`, `ms-MY`, `sw`, `sw-KE`, `af`, `af-ZA`, `am`, `am-ET`, `gu`, `gu-IN`, `kn`, `kn-IN`, `ml`, `ml-IN`, `mr`, `mr-IN`, `ne`, `ne-NP`, `pa`, `pa-IN`, `si`, `si-LK`, `ta`, `ta-IN`, `te`, `te-IN`, `ur`, `ur-PK`, `zu`, `zu-ZA`. | ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "video", "upload_date": "this_month", "duration": "4_to_20_minutes", "sort": "popularity", "max_results": 200 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "type": "video", "upload_date": "this_month", "duration": "4_to_20_minutes", "sort": "popularity", "max_results": 200, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"type": "video", "upload_date": "this_month", "duration": "4_to_20_minutes", "sort": "popularity", "max_results": 200}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/youtube-transcript-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your YouTube Transcript Scraper squid Add URLs or inputs to your **YouTube Transcript Scraper** squid. Crawler ID: `7a9835f866cd42905e75aaeadebe6aba` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields YouTube video, playlist, or channel URL. Example: `https://www.youtube.com/watch?v=dQw4w9WgXcQ` ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/tasks" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}]}' ``` ```python Python theme={null} import requests headers = {"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"} response = requests.post("https://api.lobstr.io/v1/tasks", headers=headers, json={"squid": "YOUR_SQUID_HASH", "tasks": [{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}]}) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/youtube-transcript-scraper/credit-cost Credit cost for the YouTube Transcript Scraper 1 credit per video transcript. # Get Results Source: https://docs.lobstr.io/examples/youtube-transcript-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from YouTube Transcript Scraper Retrieve scraped data from your **YouTube Transcript Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields YouTube video identifier. Example: `dQw4w9WgXcQ` Canonical URL of the video. Example: `https://www.youtube.com/watch?v=dQw4w9WgXcQ` Video title. Example: `Rick Astley - Never Gonna Give You Up` Full video description. Keywords (tags) set by the creator. Video length in seconds. Example: `212` View count at collection time. Example: `1400000000` Like count (null when likes are hidden). Example: `15000000` Approximate comment count as displayed by YouTube. Example: `2.1M` Publish date and time (UTC). Example: `2009-10-25T06:57:33Z` Relative publish time as displayed by YouTube. Example: `16 years ago` YouTube category. Example: `Music` Whether the video is unlisted. Whether YouTube flags the video as family safe. Whether the video is or was a live broadcast. Highest resolution thumbnail URL. YouTube channel identifier. Example: `UCuAXFkgsw1L7xaCfnd5JJOw` Channel name. Example: `Rick Astley` Channel URL. Example: `https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw` Channel handle. Example: `@RickAstleyYT` Channel avatar image URL. Subscriber count as displayed by YouTube. Example: `3.8M subscribers` Language setting used for this row. Example: `en` Language code of the primary transcript. Example: `en` Display name of the primary transcript track. Example: `English` Whether the primary transcript is auto-generated. Primary transcript as timestamped segments (start, duration, text). Primary transcript as plain text. Example: `We're no strangers to love...` Number of words in full\_text. Example: `312` Every downloaded caption track. Number of downloaded tracks. Example: `3` Every caption track the video offers. 'ok' when at least one track was downloaded, 'no\_captions' when none available. Example: `ok` Whether a transcript was downloaded. ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"video_id": "dQw4w9WgXcQ", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "title": "Rick Astley - Never Gonna Give You Up", "language": "en", "full_text": "We're no strangers to love...", "word_count": 312, "tracks_count": 3, "status": "ok"}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/youtube-transcript-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure YouTube Transcript Scraper settings Configure your **YouTube Transcript Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | **url** | string | — | YouTube video, playlist, or channel URL | | **language** | string | original | Caption language to download. 'original' uses the video's default language; 'en', 'fr', etc. downloads a specific language | | **include\_auto\_generated** | boolean | true | Also download auto-generated (speech-to-text) tracks | | **max\_results** | integer | — | Maximum videos collected for a playlist or channel URL | ## Code Examples ```bash cURL theme={null} curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"language": "en", "include_auto_generated": true, "max_results": 50}}' ``` ```python Python theme={null} import requests requests.post("https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH", headers={"Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json"}, json={"params": {"language": "en", "include_auto_generated": true, "max_results": 50}}) ``` ## Response ```json 201 theme={null} {"params": {"language": "en", "include_auto_generated": true, "max_results": 50}} ``` # Add Tasks Source: https://docs.lobstr.io/examples/zillow-property-listings-scraper/add-tasks POST https://api.lobstr.io/v1/tasks Add tasks to your Zillow Property Listings Scraper squid Add URLs or inputs to your **Zillow Property Listings Scraper** squid. Crawler ID: `ed06bb5ca6544bbb638c544bac48ede1` ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Body Hash ID of your squid. Array of task objects. ## Task Fields Zillow search URL or a link to a single listing. Example: `https://www.zillow.com/homes/for_sale/New-York-NY/` ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/tasks \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "squid": "ed06bb5ca6544bbb638c544bac48ede1", "tasks": [ {"url": "https://www.zillow.com/homes/for_sale/New-York-NY/"} ] }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/tasks", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "squid": "ed06bb5ca6544bbb638c544bac48ede1", "tasks": [ {"url": "https://www.zillow.com/homes/for_sale/New-York-NY/"} ], }, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"duplicated_count": 0, "tasks": [{"id": "TASK_HASH", "is_active": true, "params": {"url": "https://www.zillow.com/homes/for_sale/New-York-NY/"}, "object": "task"}]} ``` # Credit Cost Source: https://docs.lobstr.io/examples/zillow-property-listings-scraper/credit-cost Credit cost for the Zillow Property Listings Scraper | Function | Cost (credits) | Notes | | - | - | - | | Export Listings | 1 | 1 credit per property listing. | | Property Details | 1 | 1 extra credit per property listing when the add-on is enabled. Off by default. | # Get Results Source: https://docs.lobstr.io/examples/zillow-property-listings-scraper/get-results GET https://api.lobstr.io/v1/results Retrieve scraped data from Zillow Property Listings Scraper Retrieve scraped data from your **Zillow Property Listings Scraper** runs. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` ## Query Parameters Hash of the squid to get results from Page number (default: 1) ## Result Fields Zillow Property ID, the stable identifier. Example: `37544670` Direct URL of the listing on Zillow. Example: `https://www.zillow.com/homedetails/123-main-st-brooklyn-ny-11201/37544670_zpid/` Listing status: FOR\_SALE, SOLD, FOR\_RENT, etc. Example: `FOR_SALE` Asking price as a number. Example: `850000` Price exactly as displayed by Zillow. Example: `$850,000` Currency of the price. Example: `USD` Sale price when the listing is sold. Example: `820000` Date the home was sold (UTC). Example: `2026-06-15T00:00:00Z` Full address on one line. Example: `123 Main St, Brooklyn, NY 11201` Street part of the address. Example: `123 Main St` Unit or apartment number. Example: `Apt 4B` City. Example: `Brooklyn` State code. Example: `NY` ZIP code. Example: `11201` Country code. Example: `USA` Latitude. Example: `40.6928` Longitude. Example: `-73.9903` Number of bedrooms. Example: `3` Number of bathrooms (half baths counted as 0.5). Example: `2.0` Living area in square feet. Example: `1450` Lot size in lot\_area\_unit. Example: `2000.0` Unit of lot\_area\_value: sqft or acres. Example: `sqft` Property type: SINGLE\_FAMILY, CONDO, TOWNHOUSE, MULTI\_FAMILY, etc. Example: `CONDO` Number of days the listing has been on Zillow. Example: `14` Zillow's estimated market value. Example: `860000` Zillow's estimated monthly rent. Example: `3800` Tax assessed value from the county. Example: `720000` Last price change amount (negative = price cut). Example: `-25000` Date of the last price change. Example: `2026-09-01T00:00:00Z` Price reduction as displayed by Zillow. Example: `Price cut: -$25,000` Cover photo of the listing. Example: `https://photos.zillowstatic.com/fp/abc123-cc_ft_960.webp` All photos of the listing card. Number of photos. Example: `32` Brokerage that published the listing. Example: `Compass` True when owned by Zillow. Example: `false` True for Zillow Showcase listings. Example: `false` True when promoted by Zillow. Example: `false` True when a 3D home tour is available. Example: `true` True when a video is available. Example: `false` True when the listing has at least one photo. Example: `true` Open house as displayed by Zillow. Example: `Sat, Sep 20 11:00 AM - 1:00 PM` Start of the next open house (UTC). Example: `2026-09-20T15:00:00Z` End of the next open house (UTC). Example: `2026-09-20T17:00:00Z` Marketing label Zillow prints on the listing card. Example: `Open House` How the listing reached Zillow. Example: `Listed by Compass` For sale by agent. Example: `true` For sale by owner. Example: `false` An open house is scheduled. Example: `true` New construction. Example: `false` Coming soon. Example: `false` Pending or under contract. Example: `false` Sold at auction. Example: `false` Foreclosure. Example: `false` Bank owned (REO). Example: `false` ### Detail Fields The following fields require `property_details: true` in settings. Full listing description. Listing agent name. Example: `John Doe` Listing agent email. Example: `john.doe@compass.com` Listing agent phone. Example: `+12125551234` Phone for the listing brokerage. Example: `+12125559876` MLS number of the listing. Example: `REBNY-5678901` Name of the MLS. Example: `RealPlus` When Zillow last checked the MLS. Example: `2026-09-15T08:00:00Z` When the MLS record last changed. Example: `2026-09-01T12:00:00Z` Year the home was built. Example: `2003` Price per square foot. Example: `586.21` Number of views of the listing page. Example: `4821` Number of users who saved the listing. Example: `87` Effective property tax rate, in percent. Example: `1.24` Monthly HOA fee. Example: `650.0` Provider block Zillow attaches to the listing. Date the listing was posted (UTC). Example: `2026-09-01T00:00:00Z` Price of the previous sale of this home. Example: `720000` Time zone of the property. Example: `America/New_York` Neighborhood name. Example: `DUMBO` Unit of living\_area. Example: `Square Feet` Number of full bathrooms. Example: `2` Number of half bathrooms. Example: `0` Number of three-quarter bathrooms. Example: `0` Number of quarter bathrooms. Example: `0` Total number of parking spaces. Example: `1` Number of garage spaces. Example: `1` True when the home has a garage. Example: `true` True when the garage is attached. Example: `false` True when the home has a carport. Example: `false` True when the home has open parking. Example: `false` Parking features from the MLS record. Property sub types. Virtual tour link. Example: `https://my.matterport.com/show/?m=abc123` Zillow's at-a-glance fact table. Short highlight phrases from Zillow. Zillow 30-year fixed rate quoted on the listing. Example: `6.75` Zillow 15-year fixed rate quoted on the listing. Example: `6.12` Zillow 5-year ARM rate quoted on the listing. Example: `6.35` Price history: list of . ## Code Examples ```bash cURL theme={null} curl -G https://api.lobstr.io/v1/results \ -H "Authorization: Token YOUR_API_KEY" \ -d "squid=ed06bb5ca6544bbb638c544bac48ede1" \ -d "page=1" ``` ```python Python theme={null} import requests response = requests.get( "https://api.lobstr.io/v1/results", headers={"Authorization": "Token YOUR_API_KEY"}, params={"squid": "ed06bb5ca6544bbb638c544bac48ede1", "page": 1}, ) print(response.json()) ``` ## Response ```json 200 theme={null} {"total_results": 1, "data": [{"zpid": "37544670", "status": "FOR_SALE", "price": 850000, "full_address": "123 Main St, Brooklyn, NY 11201", "bed": 3, "bath": 2.0, "living_area": 1450, "home_type": "CONDO", "days_on_zillow": 14, "zestimate": 860000}]} ``` # Update Settings Source: https://docs.lobstr.io/examples/zillow-property-listings-scraper/update-settings POST https://api.lobstr.io/v1/squids/{squid_hash} Configure Zillow Property Listings Scraper settings Configure your **Zillow Property Listings Scraper** squid settings. ## Headers Your API authentication token. Value: `Token YOUR_API_KEY` Must be application/json. Value: `application/json` ## Squid Parameters | Parameter | Type | Default | Description | | - | - | - | - | | price\_min | integer | — | Only collect homes at or above this price, in USD | | price\_max | integer | — | Only collect homes at or below this price, in USD | | beds | string | Any | Minimum number of bedrooms (Any, 1+, 2+, 3+, 4+, 5+) | | baths | string | Any | Minimum number of bathrooms | | home\_type | string | Any | Property type filter | | status | string | For sale | For sale, Sold, or For rent | | days\_on\_site | string | Any | "Listed or Sold Within" filter: only listings published (or sold, in Sold mode) within this window. The API param name stays `days_on_site`. | | max\_results | integer | 1000 | Max listings per search (Zillow serves \~980 per search) | | max\_unique\_results\_per\_run | integer | — | Max unique results across all tasks in the run | | property\_details | boolean | false | Visit each listing page to collect full description, agent contacts, MLS info, year built, HOA fees, price history | Setting `property_details: true` enables additional detail fields in results. ## Code Examples ```bash cURL theme={null} curl -X POST https://api.lobstr.io/v1/squids/ed06bb5ca6544bbb638c544bac48ede1 \ -H "Authorization: Token YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "price_min": 500000, "price_max": 1000000, "beds": "2+", "home_type": "CONDO", "status": "For sale", "property_details": true, "max_results": 1000 }' ``` ```python Python theme={null} import requests response = requests.post( "https://api.lobstr.io/v1/squids/ed06bb5ca6544bbb638c544bac48ede1", headers={ "Authorization": "Token YOUR_API_KEY", "Content-Type": "application/json", }, json={ "price_min": 500000, "price_max": 1000000, "beds": "2+", "home_type": "CONDO", "status": "For sale", "property_details": True, "max_results": 1000, }, ) print(response.json()) ``` ## Response ```json 201 theme={null} {"params": {"price_min": 500000, "price_max": 1000000, "beds": "2+", "home_type": "CONDO", "status": "For sale", "property_details": true, "max_results": 1000}} ``` # lobstr.io API Documentation Source: https://docs.lobstr.io/index The most powerful and easy-to-use data collection API. 70+ ready-made crawlers, simple REST endpoints, structured JSON output. Get your API key and make your first request in minutes. Google Maps, LinkedIn, Twitter, Instagram, and more — ready to use. Typed models, auto-pagination, sync and async clients. ## Core Concepts The lobstr.io API is built around three primitives: * **Squid** — a configured scraper instance tied to a crawler and your settings * **Task** — a URL or keyword the squid will scrape * **Run** — a single execution of a squid against its tasks A typical workflow: Include `Authorization: Token YOUR_API_KEY` in every request. Get your key from the [dashboard](https://app.lobstr.io/dashboard/api). Pick a crawler (e.g. `google-maps-leads-scraper`) and create a squid with your settings. Add URLs or keywords as tasks to the squid. Trigger a run and poll for completion. Fetch structured JSON results from `GET /v1/results`. ## Developer Tools `pip install lobstrio-sdk` `pip install lobstrio` Run scrapers from Claude, ChatGPT, or Cursor.