Craigslist lockar fortfarande omkring 108 miljoner besök i månaden över cirka 700 lokala sajter — och det finns fortfarande inget publikt API. Om du vill ha strukturerad data från bostadsannonser, begagnade bilar, jobbannonser eller gig, är scraping i princip enda vägen.
Craigsists eget antibot-system är däremot skoningslöst. Det använder inte Cloudflare eller DataDome — istället kör de en egen nginx-baserad rate limiter som har finslipats i över ett decennium. Gör du fel får du en ren 403 innan du ens hunnit ta andra koppen kaffe. Jag har lagt mycket tid på att testa olika angreppssätt mot Craigsists skydd, och den här guiden är resultatet: en aktuell Python-tutorial för 2025 som fungerar oavsett kategori, täcker JSON-LD-extraktion (den största förbättringen jämfört med äldre guider), ärliga strategier för att undvika blockering, den juridiska bilden och ett no-code-alternativ för den som bara vill ha datan utan att skriva en rad kod.
Vad betyder det att skrapa Craigslist med Python?
Web scraping av Craigslist innebär att använda Python-skript för att besöka Craigslist-sidor programmässigt, extrahera den strukturerade data du bryr dig om — titlar, priser, beskrivningar, bilder, platser, publiceringsdatum — och spara den i ett kalkylblad, en databas eller en JSON-fil.
Python är det självklara valet tack vare sitt stora ekosystem av bibliotek. Med requests, BeautifulSoup, lxml och curl_cffi kan du bygga en fungerande Craigslist-scraper på under 100 rader. Communityn är enorm, så när Craigslist ändrar något (vilket händer) finns det redan någon som har hittat lösningen.
Det viktigaste att känna till: Craigslist erbjuder inget publikt read-API. Det enda officiella programgränssnittet är Bulk Posting Interface (BAPI), och det är bara för skrivning — det låter godkända betalande annonsörer publicera annonser, inte hämta dem. Alla "Craigslist API"-produkter du ser på tredjepartsplattformar är alltså inofficiella scrapers, inte sanktionerade endpoints. Vill du ha stora mängder data, då skrapar du.
Varför skrapa Craigslist? Verkliga användningsområden
Craigslist är inte bara en plats för att hitta en begagnad soffa. Det är en enorm, kontinuerligt uppdaterad datakälla över många olika kategorier. Här är vem som faktiskt har nytta av att skrapa den:
| Användningsområde | Vem har nytta av det | Vad du extraherar |
|---|---|---|
| Övervakning av bostads- och hyrespriser | Mäklare, hyresgäster, PropTech-bolag | Pris, kvadratmeter, antal sovrum, område, lat/long |
| Analys av begagnatbilmarknaden | Bilhandlare, konsumentappar, forskare | Pris, märke, modell, årsmodell, mätarställning, skick |
| Arbetsmarknadsanalys | Rekryterare, arbetsmarknadsekonomer, analyskonsulter | Titel, ersättning, anställningsform, publiceringsdatum |
| Leadgenerering | Säljteam, tjänsteföretag | Kontaktuppgifter, företagsnamn, tjänsteområde |
| Konkurrensanalys av prissättning | Lokala tjänsteföretag, e-handelsverksamhet | Priser, beskrivningar, geografiska områden |
Det mest citerade akademiska exemplet är Kaggle-datasetet "Used Cars Dataset" — ungefär 500 000 amerikanska bilannonser med 26 variabler, som har legat till grund för dussintals forskningsartiklar, inklusive en studie från ResearchGate 2024 om dynamiken på den amerikanska begagnatbilmarknaden. Hedgefonder har köpt aggregerad hyresdata från Craigslist för att analysera hyresutveckling. Och säljteam skrapar regelbundet kategorierna för tjänster och gig för leadgenerering.
Matematiken är enkel: 8 timmars manuell copy-paste mot ungefär 10 minuter med en välbyggd scraper.

Skrapa Craigslist med Python: Alla kategorier, inte bara bilar
Nästan varje guide jag hittat om Craigslist-scraping handlar bara om bilar till salu — ungefär som att skriva en Google-tutorial som bara täcker bildsök. Craigslist har dussintals kategorier, och URL-mönstren skiljer sig åt mellan dem.
Strukturen är alltid: https://{city}.craigslist.org/search/{category_slug}
Byt stadens subdomän och sluggen, så skrapar du en helt annan vertikal. Här är en referenstabell över de vanligaste kategorierna (verifierad april 2025):
| Kategori | URL-slug | Typiska fält att extrahera |
|---|---|---|
| Lägenheter / Boende | /search/apa | Pris, kvadratmeter, sovrum, plats, husdjurspolicy |
| Bilar & lastbilar | /search/cta | Pris, märke, modell, år, mätarställning |
| Jobb | /search/jjj | Titel, företag, lön, anställningsform |
| Tjänster | /search/bbb | Titel, beskrivning, telefonnummer, område |
| Gig | /search/ggg | Titel, ersättning, datum, kategori |
| Till salu (allmänt) | /search/sss | Titel, pris, skick, plats |
Du kan också lägga till frågeparametrar för filtrering:
| Parameter | Syfte | Exempel |
|---|---|---|
query | Nyckelord i fulltext | ?query=studio |
min_price / max_price | Prisintervall | &min_price=1500&max_price=3000 |
hasPic | Endast annonser med bilder | &hasPic=1 |
postedToday | Senaste 24 timmarna | &postedToday=1 |
sort | Sortering | &sort=priceasc |
s | Offset för paginering (120 per sida) | ?s=120 |
Så en URL som https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1 ger dig lägenheter i New York mellan 1 500 och 3 000 dollar med bilder. Varje Python-scraper i den här guiden fungerar för alla dessa kategorier — byt bara slug.
Craigslist HTML-selectors 2025: gamla vs. nya (och JSON-genvägen)
Den främsta orsaken till att Craigslist-scrapers slutar fungera är förändringar i HTML-strukturen. Om du följer en guide från 2022 som säger att du ska rikta in dig på .result-row eller .result-info är din scraper redan död.
Craigslist skrev om markupen för sökresultat under 2023–2024. De gamla klassnamnen ligger kvar inbäddade i nya wrappers, men om du targeterar dem högt upp i DOM:en får du en tom lista. Så här förändrades det:
| Element | Gammal selector (före 2024) | Aktuell selector (2025) |
|---|---|---|
| Annonscontainer | .result-info | .cl-search-result |
| Titel-länk | .result-title | .posting-title a |
| Pris | .result-price | .priceinfo |
| Metadata (område) | .result-hood | .meta |
Men här är den verkliga insikten — och det som skiljer en modern 2025-scraper från resten: du behöver inte parsea HTML alls för sökresultat.
Craigslist bäddar nu in varje synlig annons i en <script id="ld_searchpage_results">-tagg som strukturerad JSON-LD-data. Ett enda requests.get()-anrop returnerar hela schema.org ItemList med alla annonser på sidan — titel, pris, valuta, plats, bild-URL, länk till detaljsidan. Ingen JavaScript-rendering behövs. Inga sköra CSS-selectors.
JSON-LD-metoden är snabbare, stabilare och betydligt mindre benägen att gå sönder när Craigslist ändrar sitt gränssnitt. Det är vad varje aktivt underhållen GitHub-repo använder, och det är vad vi använder i guiden nedan.
En viktig detalj: JSON-LD-blocket finns för kategorier med prissättning — lägenheter (apa), till salu (sss), bilar (cta), boende (hhh). Det saknas ofta eller är sparsamt för jobb (jjj), gig (ggg), community (ccc) och tjänster (bbb) eftersom de annonserna inte har schema.org/Offer-prissättning. För de kategorierna får du falla tillbaka på HTML-spåret med .cl-search-result.
Välj din Python-stack: Requests + BS4 vs. Selenium vs. Playwright
Det här är frågan som dyker upp i varje scraping-forum: "Vilket bibliotek ska jag använda?" För Craigslist är svaret tydligare än för de flesta sajter.
| Faktor | requests + BeautifulSoup | Selenium | Playwright |
|---|---|---|---|
| Hastighet | 5–15 sidor/s (nätverksbegränsad) | 0,3–1 sida/s | 0,5–2 sidor/s |
| JS-renderat innehåll | Nej | Ja | Ja |
| Minne | ~30–60 MB | ~400–700 MB | ~300–500 MB |
| Installationskomplexitet | Låg | Medel | Medel |
| Motståndskraft mot bot-skydd | Låg (behöver headers/proxies) | Medel (riktig webbläsare) | Medel-hög |
| Bästa användning för Craigslist | Sökresultat (JSON-LD) | Detaljsidor med dynamiskt innehåll | Storskalig asynkron scraping |
| Inlärningskurva | Nybörjarvänlig | Medel | Medel |
Craigsists sidor renderas på servern. JSON-LD-blocket finns i den initiala HTML:en. Det finns ingen JavaScript-utmaning på read-sidorna. Varje aktivt underhållen Craigslist-scraper på GitHub använder requests + BeautifulSoup eller Scrapy. Ingen använder Selenium eller Playwright. Det är inte en slump — ett browser automation-ramverk lägger till hundratals MB minne, en 10–100× hastighetsförlust och en mer synlig fingerprint, utan någon egentlig nytta.
Min rekommendation:
- requests + BS4: Börja här. Det passar perfekt med JSON-LD-extraktion och täcker 95 % av behoven för Craigslist-scraping.
- Selenium: Endast om du behöver interagera med dynamiskt innehåll på specifika detaljsidor (sällsynt på Craigslist).
- Playwright: Om du skalar till tusentals sidor med asynkron samtidighet — men ärligt talat är det Craigslist rate limiter som är flaskhalsen, inte bibliotekets throughput.
Vi har täckt jämförelsen Playwright vs. Puppeteer och en sammanställning av de bästa Python-verktygen för web scraping i separata inlägg om du vill ha hela genomgången.
Skrapa Craigslist utan att skriva Python Get Started Free
No-code-alternativet: Skrapa Craigslist utan att skriva Python
En snabb avstickare innan koden — det här avsnittet är för alla som inte är utvecklare. Mäklare, säljteam, operationsansvariga — om du bara vill ha datan och inte bryr dig om att skriva Python finns det en snabbare väg.
Thunderbit är en AI-webbscraper som fungerar som ett Chrome-tillägg. Den kan skrapa Craigslist på ungefär två klick, utan kod. Så här ser flödet ut:
- Gå till vilken sökresultatsida som helst på Craigslist (lägenheter, bilar, jobb — vilken kategori som helst).
- Klicka på "AI Suggest Fields" i Thunderbit-sidofältet. AI:n läser sidan och identifierar automatiskt kolumner som annonstitel, pris, plats och länk.
- Klicka på "Scrape" — datan extraheras på några sekunder.
- Använd Subpage Scraping för att besöka varje annons detaljsida och berika datan med fullständiga beskrivningar, telefonnummer, bilder och attribut.
- Exportera direkt till Google Sheets, Excel, Airtable eller Notion — helt gratis.
För återkommande behov — säg daglig övervakning av lägenhetspriser eller veckovisa snapshots av jobbannonser — låter Thunderbits Scheduled Scraper dig beskriva schemat på vanlig svenska och kör det automatiskt. Inga cron-jobb, ingen serveruppsättning.
Thunderbit hanterar också antibot-skydd via sitt Cloud Scraping-läge, så du slipper tänka på roterande proxies eller att bygga headers manuellt. Om du vill prova kan du hämta Thunderbit Chrome Extension och se själv.
Om du vill ha full kontroll och anpassning, fortsätt läsa för steg-för-steg-guiden i Python.
Steg för steg: Så skrapar du Craigslist med Python (fullständig guide)
- Svårighetsgrad: Medel
- Tidsåtgång: ~30 minuter (installation + första scrape)
- Det du behöver: Python 3.8+, Chrome-browser (för att inspektera sidor), en terminal
Steg 1: Sätt upp din Python-miljö
Installera nödvändiga bibliotek:
pip install requests beautifulsoup4 lxml
lxml är valfritt men gör BeautifulSoup-parsningen märkbart snabbare. Om du senare stöter på TLS-fingerprinting-problem (mer om det i avsnittet om att undvika blockering) kan du också installera curl_cffi:
pip install curl_cffi
Dina imports:
import requests
from bs4 import BeautifulSoup
import json
import csv
import time
import random
Nu har du en ren Python-miljö med alla beroenden installerade.
Steg 2: Bygg Craigslist-URL:en för valfri kategori
Konstruera mål-URL:en dynamiskt med stad + kategori-slug + valfria filter:
from urllib.parse import urlencode
BASE = "https://{city}.craigslist.org/search/{slug}"
def build_url(city, slug, **params):
return f"{BASE.format(city=city, slug=slug)}?{urlencode(params)}"
# Exempel: lägenheter i New York, 1500–3000 dollar, med bilder
url = build_url("newyork", "apa", min_price=1500, max_price=3000, hasPic=1)
print(url)
# https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1
Byt "apa" mot "cta" (bilar), "jjj" (jobb), "bbb" (tjänster) eller någon annan slug från tabellen ovan. Byt "newyork" mot "sfbay", "chicago", "losangeles" osv.
Steg 3: Hämta sidan och extrahera inbäddad JSON
Skicka en GET-begäran med korrekta headers och parsea sedan JSON-LD-blocket:
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.0.0.0 Safari/537.36"
),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Referer": "https://www.craigslist.org/",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "same-origin",
"Upgrade-Insecure-Requests": "1",
}
session = requests.Session()
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
tag = soup.select_one("script#ld_searchpage_results")
data = json.loads(tag.text) if tag else {"itemListElement": []}
Om tag är None finns inte JSON-LD-blocket för den kategorin — då får du falla tillbaka till HTML-parsning (se selector-tabellen ovan). För lägenheter, bilar och till-salu-kategorier finns blocket normalt alltid där.
Steg 4: Parsea annonsdata till strukturerade poster
Iterera över JSON-objekten och extrahera de fält du behöver:
listings = []
for entry in data["itemListElement"]:
item = entry["item"]
offers = item.get("offers", {}) or {}
addr = (offers.get("availableAtOrFrom") or {}).get("address", {})
listings.append({
"name": item.get("name"),
"url": offers.get("url"),
"price": offers.get("price"),
"currency": offers.get("priceCurrency"),
"locality": addr.get("addressLocality"),
"region": addr.get("addressRegion"),
"image": item.get("image"),
})
print(f"Hittade {len(listings)} annonser")
Du bör se något i stil med "Hittade 120 annonser" (Craigslist visar 120 resultat per sida). Vissa annonser kan ha None som pris om publicisten inte angav något — hantera det smidigt i din vidare logik.
Steg 5: Skrapa detaljsidor för rikare data
Sökresultaten ger bara sammanfattningsdata. För fullständiga beskrivningar, attribut (sovrum, kvadratmeter, husdjurspolicy), lat/long-koordinater och bilder behöver du besöka varje annons detalj-URL.
def fetch_detail(url, session):
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
s = BeautifulSoup(r.text, "html.parser")
body = s.select_one("#postingbody")
mp = s.select_one("#map")
return {
"description": body.get_text("\n", strip=True) if body else None,
"attributes": [x.get_text(" ", strip=True)
for x in s.select("p.attrgroup span, div.attrgroup .attr")],
"lat": mp.get("data-latitude") if mp else None,
"lng": mp.get("data-longitude") if mp else None,
"images": [img["src"] for img in s.select("div.gallery img")],
}
for item in listings:
item.update(fetch_detail(item["url"], session))
time.sleep(random.uniform(3, 6)) # avgörande: anti-ban-jitter
time.sleep(random.uniform(3, 6)) är inte valfritt. Hoppar du över det kommer du sannolikt att träffa en 403 inom några dussin förfrågningar. Detaljsidorna renderas server-side med stabila selectors (#titletextonly, #postingbody, #map) som knappt har ändrats sedan omkring 2017 — en av få saker på Craigslist som faktiskt är pålitlig.
Steg 6: Hantera paginering för att skrapa alla resultat
Craigslist använder offset-parametern ?s=120 för paginering. Varje sida visar 120 resultat, och max-offset är vanligtvis 2999.
def iter_all(city, slug, max_pages=25, **filters):
for page in range(max_pages):
offset = page * 120
url = build_url(city, slug, s=offset, **filters)
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
tag = soup.select_one("script#ld_searchpage_results")
if not tag:
break
data = json.loads(tag.text)
items = data.get("itemListElement", [])
if not items:
break
for entry in items:
item = entry["item"]
offers = item.get("offers", {}) or {}
yield {
"name": item.get("name"),
"url": offers.get("url"),
"price": offers.get("price"),
}
time.sleep(random.uniform(2.5, 5.0))
Försök inte skrapa tusentals sidor i snabb följd. Craigsists rate limiter är per IP, och hållbar throughput från en enda IP ligger ungefär på 0,3–0,5 förfrågningar/sekund oavsett vilket bibliotek du använder. Den gränsen sätts av Craigslist, inte av Python.
Steg 7: Exportera din Craigslist-data till CSV, JSON eller Google Sheets
Spara resultaten:
# CSV
with open("craigslist.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=listings[0].keys())
w.writeheader()
w.writerows(listings)
# JSON
with open("craigslist.json", "w", encoding="utf-8") as f:
json.dump(listings, f, indent=2, ensure_ascii=False)
Om du hellre vill hoppa över exportkoden helt erbjuder Thunderbit gratis export till Google Sheets, Excel, Airtable eller Notion direkt från webbläsaren. Men för Python-pipelines är CSV och JSON standardformaten. Du kan också skicka datan direkt till pandas för analys eller till en databas med sqlite3.
Så undviker du att bli bannad när du skrapar Craigslist med Python
De flesta guider hoppar lättvindigt över den här delen. Craigsists antibot-system är egenutvecklat, inte färdigköpt, och har några specifika egenheter.

Använd realistiska request-headers
Craigslist validerar headerordning och fullständighet. En request som saknar Sec-Fetch-Dest eller har en gammal User-Agent flaggas innan den ens når innehållet. Den fullständiga Chrome 120+-headeruppsättningen (som visas i steg 3 ovan) är miniminivån. Rotera User-Agent per session mellan 5–10 aktuella Chrome/Firefox-strängar för desktop — men ändra den inte mitt i en session, eftersom det ser onaturligt ut.
Att sakna Sec-Fetch-*-headers är den vanligaste orsaken till att förstagångs-scrapers blockeras direkt.
Lägg in slumpmässiga pauser mellan förfrågningar
Det finns en bred konsensus i communityn, från flera källor (ScrapingBee, Scraperly, Oxylabs, Multilogin), om slumpmässiga 2–5 sekunder mellan hämtningar av söksidor och 3–6 sekunder mellan detaljsidor. Konstanta intervall ser bot-lika ut. Använd time.sleep(random.uniform(2, 5)) — aldrig time.sleep(2).
Rotera proxies om du skrapar i större skala
Craigslist blockerar ofta hela IP-ranges från AWS, GCP och Azure. Datacenter-proxies är ofta värdelösa direkt från start. För allt över några hundra sidor behöver du roterande residential proxies, roterade var 20–30:e request. Mobile proxies har lägst upptäcktsrisk men kostar 8–30 USD/GB.
| Proxytyp | Upptäcktsrisk på Craigslist | Kostnad (2025) |
|---|---|---|
| Datacenter | Väldigt hög — blockeras ofta vid första requesten | 0,50–2 USD/GB |
| Roterande residential | Låg — rekommenderas | 5–15 USD/GB |
| Mobile | Lägst | 8–30 USD/GB |
Thunderbits Cloud Scraping-läge hanterar proxyrotation automatiskt om du hellre slipper sköta detta själv.
Hantera CAPTCHA på ett smidigt sätt
CAPTCHA på Craigslist är ovanligt på lässidor — de dyker mest upp i publicerings- och svarsfunktioner. Om en sådan dyker upp: pausa minst 60 sekunder, byt IP, rensa cookies och sänk hastigheten. Ihållande CAPTCHA är ett tecken på att du kör för aggressivt, inte ett pussel du ska brute-force:a med en solver.
Respektera rate limits och bygg in backoff
Craigslist returnerar 403 (inte 429) när du når rate limit. En 403 betyder att den aktuella IP:n finns på en denylist — försök inte igen blint. Byt IP, ändra UA och vänta.
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
retry = Retry(
total=5,
backoff_factor=1.5, # 1.5, 3, 6, 12, 24s
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods={"GET"},
respect_retry_after_header=True,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)
Ett tips till: communityrapporter pekar konsekvent ut 2–6 på morgonen lokal tid i målstaden som det säkraste scrapingfönstret, med cirka 30–40 % lägre blockfrekvens än dagtid.
TLS-fingerprinting — den dolda fällan
Craigslist bot-lager inspekterar TLS ClientHello. Pythons requests-bibliotek (byggt på OpenSSL) har en JA3-fingerprint som inte matchar någon riktig webbläsare. En perfekt User-Agent-header kombinerad med en icke-webbläsar-TLS-fingerprint är en detekterbar mismatch. Lösningen är curl_cffi med impersonate="chrome124", som emulerar Chromes TLS-handshake:
from curl_cffi import requests as cffi_requests
r = cffi_requests.get(url, headers=HEADERS, impersonate="chrome124")
Om du får oförklarliga 403:or trots rena residential IP:er och korrekta headers är TLS-fingerprinting nästan säkert orsaken.
Craigslist robots.txt, användarvillkor och etisk scraping
De flesta guider hoppar över det här helt eller gömmer en kort mening i FAQ:n. Med tanke på att Craigslist har vunnit en dom på 60,5 miljoner dollar mot en scraper (RadPad, 2017), förtjänar ämnet mer än en fotnot.
Vad Craigslist robots.txt faktiskt säger
robots.txt-filen är förvånansvärt kort. Den har ett enda User-agent: *-block med bara sju förbjudna paths:
Disallow: /reply
Disallow: /fb/
Disallow: /suggest
Disallow: /flag
Disallow: /mf
Disallow: /mailflag
Disallow: /eaf
Alla sju är interaktiva eller förändrande endpoints: svara, flagga, föreslå, maila en vän. Annonsidor (/search/..., enskilda inläggs-URL:er) är inte förbjudna. Det finns ingen Crawl-delay-direktiv, även om Craigslist i praktiken verkställer det via IP-blockering.
Stadens subdomäner publicerar också sitemap-filer — till exempel https://newyork.craigslist.org/sitemap/index.xml — vilket är den officiella sökvägen till annonser.
Juridiska prejudikat: fallen som spelar roll
Craigslist v. 3Taps (2013, förlikning 2015): 3Taps skrapade Craigslist-annonser och sålde vidare datan. När Craigslist skickade ett cease-and-desist och blockerade deras IP:er, gick 3Taps runt spärren med roterande proxies. Domstolen slog fast att att kringgå IP-blockeringar efter uttrycklig återkallelse utgjorde "without authorization" enligt CFAA. 3Taps förlikades för 1 miljon dollar.
Meta v. Bright Data (2024): Ett mer nyligt avgörande slog fast att Metas villkor inte kan förbjuda utloggad scraping av offentligt tillgänglig data. Domstolen bedömde att en utloggad scraper var "i samma position som en besökare". Det här är det viktigaste avgörandet för scrapers 2024–2025 — om du aldrig skapar ett Craigslist-konto, aldrig loggar in och bara besöker offentligt synliga sidor, är det mindre sannolikt att användarvillkoren kan drivas igenom som ett kontrakt mot dig.
Den praktiska slutsatsen: CFAA-risken har minskat avsevärt efter Van Buren (2021) och hiQ v. LinkedIn (2022) för offentligt tillgängliga sidor. Men skadeståndskrav enligt delstatsrätt, som trespass-to-chattels och misappropriation, är fortfarande aktuella — det är det som låg bakom både 3Taps-förlikningen och RadPad-domen på 60,5 miljoner dollar.
Det här är information, inte juridisk rådgivning. Om du ska skrapa Craigslist kommersiellt, prata med en jurist.
Praktisk checklista för etisk scraping
- ✅ Respektera varje
Disallowi robots.txt — särskilt de sju action-endpointsen - ✅ Håll dig långt under 1 000 sidor per 24 timmar och IP (Craigsists användarvillkor anger 0,25 dollar per sida över den gränsen som avtalsmässigt skadestånd)
- ✅ Var utloggad — skapa aldrig ett Craigslist-konto för scraping
- ✅ Kringgå aldrig IP-blockeringar med proxies efter en uttrycklig blockering (det var så 3Taps föll)
- ✅ Lägg in pauser mellan requests — minst 2–5 sekunder
- ✅ Skrapa inte personliga kontaktuppgifter för spam
- ✅ Återpublicera inte rå Craigslist-data eller presentera den som din egen plattform
- ✅ Använd datan för legitim forskning, analys eller personligt bruk
- ✅ Föredra publicerade sitemaps framför ren brute-force-crawling när det går
- ✅ Ta bort personuppgifter (mejl, telefonnummer) vid inläsning om du lagrar data
Vi har skrivit en djupare guide om juridiska konsekvenser av web scraping om du vill ha hela bilden.
Python vs. no-code: vilken metod passar dig?
| Faktor | Python (requests + BS4) | Thunderbit (No-code) |
|---|---|---|
| Starttid | 30–60 min (installera, skriva kod) | 2 minuter (installera Chrome-tillägg) |
| Teknisk nivå som krävs | Medelgod Python | Ingen |
| Anpassning | Full kontroll över logik, fält och flöde | AI upptäcker fält automatiskt; användaren kan justera |
| Skala | Obegränsad (med proxies, schemaläggning) | Scheduled Scraper för återkommande uppgifter |
| Hantering av blockeringar | Manuell (headers, pauser, proxies, TLS) | Inbyggd (Cloud Scraping) |
| Exportalternativ | CSV, JSON (du bygger det själv) | Google Sheets, Excel, Airtable, Notion — gratis |
| Bäst för | Utvecklare, data scientists, anpassade pipelines | Säljteam, mäklare, operationschefer |
Välj Python om du behöver full anpassning, planerar att integrera med en större datapipeline eller vill förstå exakt vad som händer under huven. Välj Thunderbit om du vill ha resultat snabbt utan att skriva eller underhålla kod. Båda är helt rimliga val. Det handlar om ditt användningsfall och om du hellre vill spendera tiden i terminalen eller i webbläsaren.
Avslutning
Craigslist är en rik, kontinuerligt uppdaterad datakälla inom boende, bilar, jobb, tjänster, gig och mer — och utan något publikt API är scraping enda sättet att få strukturerad data i stor skala. Det som faktiskt fungerar 2025: extrahera den inbäddade JSON-LD:n från sökresultaten (inte sköra CSS-selectors), använd requests + BeautifulSoup (inte Selenium), lägg till realistiska headers med Sec-Fetch-*, slumpa pauser och använd residential proxies om du går bortom några hundra sidor.
JSON-LD-metoden är den enskilt största förbättringen jämfört med äldre guider. Den är snabbare, mer robust mot layoutändringar och kräver ingen JavaScript-rendering. Kombinera den med strategierna ovan för att undvika blockeringar så slipper du de 403:or som stoppar de flesta scrapers.
Om du hellre hoppar över koden helt kan Thunderbit Chrome Extension skrapa vilken Craigslist-kategori som helst på ett par klick och exportera direkt till ditt kalkylblad eller din databas. Vill du gå djupare täcker våra guider om hur man webbscrapar med Python och best practices för web scraping grunderna mer ingående.
Testa Thunderbit för Craigslist-scraping
Testa AI Web Scraper för Craigslist-data Get Started Free
Vanliga frågor
Är det lagligt att skrapa Craigslist?
Craigsists användarvillkor förbjuder automatiserad scraping och innehåller en klausul om avtalsmässigt skadestånd (0,25 dollar per sida över 1 000 per dag). Men senare domstolsavgöranden — särskilt Meta v. Bright Data (2024) och hiQ v. LinkedIn (2022) — har begränsat CFAA-ansvar för utloggad scraping av offentligt tillgänglig data. Skadeståndskrav enligt delstatsrätt, som trespass-to-chattels, är fortfarande en risk, särskilt vid kommersiell vidareförsäljning. Respektera robots.txt, var utloggad, lägg in pauser och återpublicera inte rådata. Detta är allmän information, inte juridisk rådgivning.
Har Craigslist ett publikt API?
Nej. Craigslist erbjuder bara ett skrivbart Bulk Posting Interface (BAPI) för godkända betalande annonsörer. Det finns inget publikt read-API, ingen utvecklarportal och ingen begränsad nivå för att hämta data. Alla "Craigslist API"-produkter du ser hos tredjepartsleverantörer är inofficiella scrapers.
Varför går min Craigslist-scraper sönder hela tiden?
Nästan alltid på grund av ändringar i HTML-strukturen. Craigslist skrev om markupen för sökresultat under 2023–2024, och guider som använder äldre selectors som .result-row eller .result-info fungerar inte längre. Byt till den inbäddade JSON-LD-metoden (parsa script#ld_searchpage_results) för ett mycket robustare arbetssätt. Kontrollera också att dina headers innehåller Sec-Fetch-*-fält — saknas de får du ofta direktblockering.
Kan jag skrapa Craigslist utan Python?
Ja. Thunderbits Chrome-tillägg för AI web scraping fungerar på vilken Craigslist-sida som helst — lägenheter, bilar, jobb, tjänster. Klicka på "AI Suggest Fields" för att autoidentifiera kolumner, klicka på "Scrape" för att extrahera data och exportera gratis till Google Sheets, Excel, Airtable eller Notion. Ingen kod, ingen installation, ingen proxyhantering.
Hur ofta kan jag skrapa Craigslist utan att bli bannad?
Med en enda residential IP ligger hållbar throughput ungefär på 0,3–0,5 förfrågningar per sekund med slumpmässiga pauser på 2–5 sekunder mellan sidor. Håll dig under 1 000 sidor per 24-timmarsperiod och IP för att undvika både blockeringar och gränsen för avtalsmässigt skadestånd i Craigsists villkor. Scraping under lågtrafik (2–6 på morgonen lokal tid i målstaden) minskar blockfrekvensen med ungefär 30–40 %. För större volymer, rotera residential proxies var 20–30:e request.
Läs mer
- Så gör du web scraping utan att bli blockerad i Python
- Så använder du en Craigslist-scraper för att öka dataeffektiviteten
- Så skriver du en web scraper med Python: från start till mål
- Python web scraping: undvik blockeringar med smart proxyanvändning
- Steg för steg i web scraping: så skrapar du med Python på ett enkelt sätt


