Slik skraper jeg Craigslist med Python uten å bli blokkert

Sist oppdatert April 16, 2026
Slik skraper jeg Craigslist med Python uten å bli blokkert

Craigslist trekker fortsatt inn rundt 108 millioner besøk i måneden på tvers av omtrent 700 lokale nettsteder — og de har fortsatt ingen offentlig API. Hvis du vil ha strukturert data fra leilighetsannonser, bruktbiler, jobbinnlegg eller småjobber, er skraping i praksis det eneste reelle alternativet.

Craigslist sitt egenutviklede anti-bot-system er imidlertid nådeløst. Det bruker ikke Cloudflare eller DataDome — de kjører sin egen nginx-baserte rate limiter som har blitt finjustert i over ti år. Gjør du et feil trekk, får du en ren 403 før du har rukket å ta den andre kaffekoppen. Jeg har brukt mye tid på å teste ulike metoder mot Craigslist sine forsvar, og denne guiden er resultatet: en oppdatert Python-veiledning for 2025 som gjelder på tvers av kategorier, og som dekker JSON-LD-metoden for uthenting av data (den klart viktigste forbedringen sammenlignet med utdaterte guider), ærlige strategier for å unngå blokkering, det juridiske landskapet, og et kodefritt alternativ for deg som bare vil ha dataene uten å skrive en eneste linje kode.

Hva betyr det å skrape Craigslist med Python?

Å skrape Craigslist med web scraping betyr å bruke Python-skript til programmatisk å besøke Craigslist-sider, hente ut strukturerte data du er interessert i — som titler, priser, beskrivelser, bilder, lokasjoner og publiseringsdatoer — og lagre dem i et regneark, en database eller en JSON-fil.

Python er ofte førstevalget fordi økosystemet av biblioteker er så sterkt. Med requests, BeautifulSoup, lxml og curl_cffi kan du bygge en fungerende Craigslist-scraper på under 100 linjer. Fellesskapet er enormt, så når Craigslist endrer noe (og det gjør de), har noen som regel allerede funnet en løsning.

Det viktigste å vite: Craigslist tilbyr ikke en offentlig lese-API. Den eneste offisielle programatiske grensesnittet er Bulk Posting Interface (BAPI), som kun går én vei — det lar godkjente betalende annonsører sende inn annonser, ikke hente dem ut. Alle produktene du ser fra tredjeparter som markedsføres som "Craigslist API", er i realiteten uoffisielle scrapers, ikke godkjente endepunkter. Vil du ha data i bulk, må du skrape.

Hvorfor skrape Craigslist? Reelle bruksområder

Craigslist er ikke bare et sted for å finne en brukt sofa. Det er et enormt, kontinuerlig oppdatert datasett på tvers av mange bransjer. Her er hvem som faktisk får verdi ut av å skrape det:

BruksområdeHvem har nytte av detHva du henter ut
Overvåking av leilighets- og leiepriserEiendomsmeglere, leietakere, PropTech-selskaperPris, kvadratmeter, soverom, nabolag, breddegrad/lengdegrad
Analyse av bruktbilmarkedetBilforhandlere, forbrukerapper, forskerePris, merke, modell, år, kilometerstand, tilstand
Forskning på arbeidsmarkedetRekrutterere, arbeidsøkonomer, arbeidsmarkedsanalytikereTittel, lønn, ansettelsesform, publiseringsdato
LeadgenereringSalgsteam, tjenesteleverandørerKontaktinfo, firmanavn, tjenesteområde
Konkurranseanalyse av priserLokale tjenesteleverandører, e-handelsoperasjonerPriser på tjenester, beskrivelser, områder som dekkes

Det mest siterte akademiske eksemplet er Kaggle-datasettet «Used Cars Dataset» — omtrent 500 000 bruktbilannonser fra USA med 26 variabler, som har vært grunnlaget for en rekke artikler, inkludert en ResearchGate-studie fra 2024 om dynamikken i det amerikanske bruktbilmarkedet. Hedgefond har kjøpt samlet Craigslist-data om leiepriser for å forske på leietrender. Og salgsteam skraper jevnlig kategoriene for tjenester og småjobber for å generere leads.

Regnestykket er enkelt: 8 timer med manuell kopiering og liming mot omtrent 10 minutter med en godt bygget scraper.

craigslist_stats_55285c3a34.png

Skrap Craigslist med Python: Alle kategorier, ikke bare biler

Nesten alle Craigslist-guider jeg har sett, dekker bare biler til salgs — omtrent som å skrive en Google-veiledning som bare handler om bildesøk. Craigslist har dusinvis av kategorier, og URL-mønstrene er ulike for hver av dem.

Strukturen er alltid: https://{city}.craigslist.org/search/{category_slug}

Bytt ut by-subdomenet og slug-en, så skraper du en helt annen kategori. Her er en referansetabell over de mest populære kategoriene (verifisert april 2025):

KategoriURL-slugTypiske felt å hente ut
Leiligheter / bolig/search/apaPris, kvadratmeter, soverom, beliggenhet, husdyrregler
Biler og lastebiler/search/ctaPris, merke, modell, år, kilometerstand
Jobber/search/jjjTittel, selskap, lønn, ansettelsestype
Tjenester/search/bbbTittel, beskrivelse, telefonnummer, område
Småjobber/search/gggTittel, kompensasjon, dato, kategori
Til salgs (generelt)/search/sssTittel, pris, tilstand, beliggenhet

Du kan også legge på query-parametere for filtrering:

ParameterFormålEksempel
queryFulltekstsøk / nøkkelord?query=studio
min_price / max_pricePrisklasse&min_price=1500&max_price=3000
hasPicBare annonser med bilder&hasPic=1
postedTodaySiste 24 timer&postedToday=1
sortSortering&sort=priceasc
sSideoffset (120 per side)?s=120

Så en URL som https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1 gir deg leiligheter i New York mellom 1 500 og 3 000 dollar med bilder. Alle Python-scraperne i denne guiden fungerer på tvers av alle disse kategoriene — du bytter bare slug.

Craigslist HTML-selectors i 2025: gammelt vs. nytt (og JSON-snarveien)

Den vanligste årsaken til at Craigslist-scrapere slutter å virke, er endringer i HTML-strukturen. Hvis du følger en guide fra 2022 som sier at du skal hente .result-row eller .result-info, er scraperen din allerede ute av drift.

Craigslist skrev om markeringen for søkeresultatene i 2023–2024. De gamle klassenavnene ligger fortsatt inni nye beholdere, men hvis du peker på dem øverst i DOM-treet, får du en tom liste. Slik har det endret seg:

ElementGammel selector (før 2024)Nåværende selector (2025)
Beholder for annonse.result-info.cl-search-result
Tittel-lenke.result-title.posting-title a
Pris.result-price.priceinfo
Metadata (område).result-hood.meta

Men her er den virkelige innsikten — og det som skiller en oppdatert scraper i 2025 fra alt annet: du trenger faktisk ikke parse HTML i det hele tatt for søkeresultatene.

Craigslist legger nå inn hver synlige annonse i en <script id="ld_searchpage_results">-tagg som strukturert JSON-LD-data. Én enkelt requests.get()-kall returnerer hele schema.org ItemList med alle annonsene på siden — tittel, pris, valuta, plassering, bilde-URL og lenke til detaljsiden. Ingen JavaScript-rendering er nødvendig. Ingen skjøre CSS-selectors.

JSON-LD-metoden er raskere, mer stabil og langt mindre utsatt for å ryke når Craigslist justerer grensesnittet. Det er metoden alle aktivt vedlikeholdte GitHub-repositorier bruker, og det er den vi bruker i guiden nedenfor.

Et forbehold: JSON-LD-blokken er til stede for kategorier med priser — leiligheter (apa), til salgs (sss), biler (cta), bolig (hhh). Den mangler ofte eller er svært begrenset for jobber (jjj), småjobber (ggg), community (ccc) og tjenester (bbb), fordi disse annonsene ikke har schema.org/Offer-prising. For disse kategoriene må du falle tilbake til HTML-sporet med .cl-search-result.

Velg Python-stack: Requests + BS4 vs. Selenium vs. Playwright

Dette er spørsmålet som dukker opp i alle scraping-forum: «Hvilket bibliotek bør jeg bruke?» For Craigslist er svaret faktisk tydeligere enn for de fleste andre nettsteder.

Faktorrequests + BeautifulSoupSeleniumPlaywright
Hastighet5–15 sider/sek (nettverksbundet)0,3–1 side/sek0,5–2 sider/sek
JS-rendret innholdNeiJaJa
Minnebruk~30–60 MB~400–700 MB~300–500 MB
OppsettkompleksitetLavMiddelsMiddels
Robusthet mot anti-botLav (trenger headers/proxyer)Middels (ekte nettleser)Middels-høy
Beste Craigslist-bruksområdeSøkeresultater (JSON-LD)Detaljsider med dynamisk innholdStorskala asynkron skraping
LæringskurveNybegynnervennligModeratModerat

Craigslist-sidene er server-rendered. JSON-LD-blokken ligger i den første HTML-en. Det finnes ingen JavaScript-utfordring på lesesiden. Alle aktivt vedlikeholdte Craigslist-scrapere på GitHub bruker requests + BeautifulSoup eller Scrapy. Ingen bruker Selenium eller Playwright. Det er ikke tilfeldig — et rammeverk for nettleserautomatisering legger på hundrevis av MB med minne, en 10–100x ytelsesstraff og et mer synlig fingerprint, uten å gi noen reell fordel.

Min anbefaling:

  • requests + BS4: Start her. Det passer perfekt med JSON-LD-metoden og dekker 95 % av behovene for Craigslist-skraping.
  • Selenium: Bare hvis du må samhandle med dynamisk innhold på bestemte detaljsider (sjeldent på Craigslist).
  • Playwright: Hvis du skalerer til tusenvis av sider med asynkron concurreny — men ærlig talt er det Craigslist sin rate limiter som er flaskehalsen, ikke biblioteket ditt.

Vi har også omtalt sammenligningen Playwright vs. Puppeteer og en oversikt over de beste Python-verktøyene for web scraping i egne innlegg hvis du vil ha hele bildet.

Skrap Craigslist uten å skrive Python Get Started Free

Det kodefrie alternativet: skrap Craigslist uten å skrive Python

En rask avstikker før koden — denne delen er for alle som ikke er utviklere. Eiendomsmeglere, salgsteam, driftsledere — hvis du bare vil ha dataene og ikke bryr deg om å skrive Python, finnes det en raskere vei.

Thunderbit er en AI-webscraper som fungerer som en Chrome-utvidelse. Den kan skrape Craigslist på omtrent to klikk, helt uten kode. Slik fungerer det:

  1. Gå til en hvilken som helst søkeresultatside på Craigslist (leiligheter, biler, jobber — hvilken som helst kategori).
  2. Klikk "AI Suggest Fields" i Thunderbit-sidepanelet. AI-en leser siden og foreslår automatisk kolonner som annonsetittel, pris, plassering og lenke.
  3. Klikk "Scrape" — dataene hentes ut på sekunder.
  4. Bruk Subpage Scraping for å åpne hver annonse sin detaljside og berike dataene med full beskrivelse, telefonnummer, bilder og attributter.
  5. Eksporter direkte til Google Sheets, Excel, Airtable eller Notion — helt gratis.

For gjentakende behov — for eksempel daglig overvåking av leiepriser eller ukentlige snapshots av jobbannonser — lar Thunderbit sin Scheduled Scraper deg beskrive planen med helt vanlig tekst, og så kjører den automatisk. Ingen cron-jobber, ingen serveroppsett.

Thunderbit håndterer også anti-bot-mekanismer gjennom Cloud Scraping-modus, så du slipper å tenke på roterende proxyer eller spesialtilpassede headers. Vil du prøve det, kan du laste ned Thunderbit Chrome Extension og se selv.

Hvis du vil ha full kontroll og mulighet til å tilpasse alt, kan du fortsette med Python-steg-for-steg under.

Steg for steg: Slik skraper du Craigslist med Python (full veiledning)

  • Vanskelighetsgrad: Middels
  • Tidsbruk: Ca. 30 minutter (oppsett + første scrape)
  • Du trenger: Python 3.8+, Chrome-nettleser (for inspeksjon av sider), en terminal

Steg 1: Sett opp Python-miljøet ditt

Installer nødvendige biblioteker:

pip install requests beautifulsoup4 lxml

lxml er valgfritt, men gjør BeautifulSoup-parsingen merkbart raskere. Hvis du senere støter på TLS-fingerprinting-problemer (mer om det i delen om å unngå blokkering), kan du også installere curl_cffi:

pip install curl_cffi

Importblokken din:

import requests
from bs4 import BeautifulSoup
import json
import csv
import time
import random

Nå bør du ha et rent Python-miljø med alle avhengigheter installert.

Steg 2: Bygg Craigslist-URL-en for hvilken som helst kategori

Konstruer mål-URL-en dynamisk ved hjelp av by + kategori-slug + valgfrie filtre:

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)}"

# Eksempel: leiligheter 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

Bytt "apa" med "cta" (biler), "jjj" (jobber), "bbb" (tjenester), eller en hvilken som helst slug fra kategoritabellen ovenfor. Bytt "newyork" med "sfbay", "chicago", "losangeles", osv.

Steg 3: Hent siden og trekk ut innebygd JSON

Send en GET-forespørsel med riktige headers, og parse deretter JSON-LD-blokken:

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": []}

Hvis tag er None, finnes ikke JSON-LD-blokken for den kategorien — fall tilbake til HTML-parsing (se selector-tabellen over). For leiligheter, biler og kategorier for salg er JSON-LD-blokken som regel alltid til stede.

Steg 4: Parse annonsedata inn i strukturerte poster

Iterer gjennom JSON-elementene og trekk ut feltene du trenger:

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"Fant {len(listings)} annonser")

Du bør se noe som ligner på «Fant 120 annonser» (Craigslist viser 120 resultater per side). Noen annonser kan ha None i pris hvis annonsøren ikke oppga det — håndter det pent i den videre logikken din.

Steg 5: Skrap detaljsider for rikere data

Søkeresultatene gir deg bare sammendragsinformasjon. For full beskrivelse, attributter (soverom, kvadratmeter, husdyrregler), koordinater og bilder må du besøke detalj-URL-en for hver annonse.

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))  # viktig: anti-ban-jitter

time.sleep(random.uniform(3, 6)) er ikke valgfritt. Hopper du over dette, vil du ofte møte en 403 i løpet av noen titalls forespørsler. Detaljsider er server-rendered med stabile selectors (#titletextonly, #postingbody, #map) som i praksis ikke har endret seg siden rundt 2017 — et av de få tingene ved Craigslist som faktisk er stabilt.

Steg 6: Håndter paginering for å skrape alle resultater

Craigslist bruker offset-parameteren ?s=120 for paginering. Hver side viser 120 resultater, og maksimal offset er som regel 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))

Ikke prøv å skrape tusenvis av sider i rask rekkefølge. Craigslist sin rate limiter gjelder per IP, og bærekraftig gjennomstrømning på én enkelt IP topper seg rundt 0,3–0,5 forespørsler/sekund uansett hvilket bibliotek du bruker. Den grensen settes av Craigslist, ikke av Python.

Steg 7: Eksporter Craigslist-dataene dine til CSV, JSON eller Google Sheets

Lagre resultatene dine:

# 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)

Hvis du heller vil hoppe over eksportkoden helt, tilbyr Thunderbit gratis eksport til Google Sheets, Excel, Airtable eller Notion direkte fra nettleseren. Men for Python-pipelines er CSV og JSON standardformatene. Du kan også sende dataene rett inn i pandas for analyse eller inn i en database med sqlite3.

Slik unngår du å bli blokkert når du skraper Craigslist med Python

De fleste guider glatter bare over denne delen. Craigslist sitt anti-bot-system er egenutviklet, ikke hyllevare, og har noen ganske spesifikke særtrekk.

craigslist_antibot_ae9ddc3f54.png

Bruk realistiske request-headere

Craigslist validerer rekkefølgen og fullstendigheten på headere. En forespørsel som mangler Sec-Fetch-Dest eller har en utdatert User-Agent blir flagget før den i det hele tatt når innholdet. Det fullstendige Chrome 120+-headersetet (vist i steg 3 ovenfor) er minimum. Roter User-Agent per sesjon mellom 5–10 nylige Chrome-/Firefox-strenger for desktop — men ikke bytt den midt i en sesjon, for da ser det unaturlig ut.

Mangel på Sec-Fetch-*-headere er den vanligste årsaken til at førstegangs-scrapere blir blokkert umiddelbart.

Legg inn tilfeldige pauser mellom forespørsler

Konsensus fra flere kilder (ScrapingBee, Scraperly, Oxylabs, Multilogin) er at du bør bruke tilfeldige 2–5 sekunder mellom henting av søkeresultatsider og 3–6 sekunder mellom detaljsider. Konstante intervaller ser bot-aktige ut. Bruk time.sleep(random.uniform(2, 5)) — aldri time.sleep(2).

Roter proxyer hvis du skraper i stor skala

Craigslist blokkerer forhåndsvisse IP-serier fra AWS, GCP og Azure. Datacenter-proxyer blir ofte blokkert før de i det hele tatt får startet. For alt utover noen få hundre sider trenger du roterende residential proxies, rotert hver 20.–30. forespørsel. Mobile proxyer har lavest risiko for deteksjon, men koster $8–30/GB.

ProxytypeDeteksjonsrisiko hos CraigslistKostnad (2025)
DatacenterSvært høy — ofte blokkert ved første forespørsel$0.50–2/GB
Roterende residentialLav — anbefalt$5–15/GB
MobilLavest$8–30/GB

Thunderbit sin Cloud Scraping-modus håndterer proxyrotasjon automatisk hvis du heller vil slippe å administrere dette selv.

Håndter CAPTCHA-er på en ryddig måte

CAPTCHA-er på Craigslist er sjeldne på lesesider — de dukker oftest opp i flyter for publisering eller svar. Hvis en dukker opp: vent minst 60 sekunder, roter IP, tøm informasjonskapsler og reduser tempoet. Vedvarende CAPTCHA-er betyr at tempoet ditt er for aggressivt, ikke at du skal brute-force deg gjennom med en solver.

Respekter rate limits og bygg inn backoff

Craigslist returnerer 403 (ikke 429) når du treffer rate limit. En 403 betyr at den aktuelle IP-en er satt på en deny-liste — ikke prøv på nytt i blinde. Roter IP, bytt UA og vent.

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)

Et ekstra tips: rapporter fra fellesskapet peker jevnlig på kl. 02–06 lokal tid i målbyen som det tryggeste tidspunktet å skrape på, med omtrent 30–40 % lavere blokkering enn på dagtid.

TLS-fingerprinting — den skjulte fellen

Craigslist sitt bot-lag inspiserer TLS ClientHello. Python sitt requests-bibliotek (bygget på OpenSSL) har et JA3-fingerprint som ikke matcher noen ekte nettleser. En perfekt User-Agent-header kombinert med et TLS-fingerprint som ikke ser ut som en nettleser, er en tydelig mismatch. Løsningen er curl_cffi med impersonate="chrome124", som etterligner Chrome sin TLS-handshake:

from curl_cffi import requests as cffi_requests

r = cffi_requests.get(url, headers=HEADERS, impersonate="chrome124")

Hvis du får uforklarlige 403-er med rene residential IP-er og riktige headere, er TLS-fingerprinting nesten helt sikkert årsaken.

Craigslist robots.txt, bruksvilkår og etisk skraping

De fleste guider hopper enten over dette helt, eller gjemmer en énlinjes kommentar i FAQ-en. Med tanke på at Craigslist har vunnet en dom på $60,5 millioner mot en scraper (RadPad, 2017), fortjener dette mer enn en fotnote.

Hva sier Craigslist sin robots.txt egentlig?

robots.txt-filen er overraskende kort. Den har én User-agent: *-blokk med bare sju forbudte stier:

Disallow: /reply
Disallow: /fb/
Disallow: /suggest
Disallow: /flag
Disallow: /mf
Disallow: /mailflag
Disallow: /eaf

Alle sju er interaktive eller muterende endepunkter: reply, flag, suggest, email-a-friend. Annonse-sider (/search/..., individuelle annonse-URL-er) er ikke forbudt. Det finnes ingen Crawl-delay-direktiv, selv om Craigslist likevel håndhever en form for forsinkelse via IP-blokkering.

By-subdomener publiserer også sitemaps — for eksempel https://newyork.craigslist.org/sitemap/index.xml — som er den offisielle, oppdagbare veien til annonser.

Juridiske presedenser: sakene som betyr noe

Craigslist v. 3Taps (2013, forlik 2015): 3Taps skrapte Craigslist-annonser og solgte dem videre. Da Craigslist sendte et cease-and-desist og blokkerte IP-ene deres, gikk 3Taps rundt blokkeringen med roterende proxyer. Retten mente at det å omgå IP-blokkeringer etter uttrykkelig tilbaketrekking av tillatelse utgjorde «without authorization» etter CFAA. 3Taps inngikk forlik på 1 million dollar.

Meta v. Bright Data (2024): En mer nylig avgjørelse slo fast at Meta sine bruksvilkår ikke kan forby innlogget-skrepping av offentlig tilgjengelige data. Retten mente at en innlogget scraper var «in the same shoes as a visitor». Dette er den viktigste avgjørelsen for scrapers i 2024–2025 — hvis du aldri oppretter en Craigslist-konto, aldri logger inn, og bare besøker offentlig synlige sider, er det ikke sikkert at bruksvilkårene kan håndheves mot deg som kontrakt.

Den praktiske lærdommen: Risikoen etter CFAA er betydelig redusert etter Van Buren (2021) og hiQ v. LinkedIn (2022) for offentlig tilgjengelige sider. Men erstatningskrav etter delstatlig rett, som trespass-to-chattels og misappropriation, er fortsatt reelle — det var slike krav som bidro til både 3Taps-forliket og RadPad-dommen på 60,5 millioner dollar.

Dette er kun informasjon, ikke juridisk rådgivning. Snakk med en advokat hvis du skraper Craigslist kommersielt.

Praktisk sjekkliste for etisk skraping

  • ✅ Følg alle Disallow-reglene i robots.txt — spesielt de sju handlingsendepunktene
  • ✅ Hold deg godt under 1 000 sider per 24-timersperiode per IP (Craigslist sine bruksvilkår fastsetter $0.25 per side over denne grensen som avtalt erstatning)
  • ✅ Vær alltid utlogget — opprett aldri en Craigslist-konto for skraping
  • ✅ Omgå aldri IP-blokkeringer med proxyer etter en eksplisitt blokkering (det var dette som felte 3Taps)
  • ✅ Legg inn pauser mellom forespørsler — minimum 2–5 sekunder
  • ✅ Ikke skrap personlige kontaktopplysninger for spam
  • ✅ Ikke videredistribuer rå Craigslist-data eller presenter dem som din egen plattform
  • ✅ Bruk dataene til legitim forskning, analyse eller personlig bruk
  • ✅ Foretrekk publiserte sitemaps fremfor ren brute-force-crawling der det er mulig
  • ✅ Fjern PII (e-post, telefonnummer) ved innlasting hvis du lagrer dataene

Vi har skrevet en grundigere guide om de juridiske konsekvensene av web scraping hvis du vil ha hele bildet.

Python vs. kodefritt: hvilken tilnærming passer for deg?

FaktorPython (requests + BS4)Thunderbit (kodefritt)
Oppsettstid30–60 min (installasjon, skrive kode)2 minutter (installer Chrome-utvidelse)
Teknisk kompetanseMiddels PythonIngen
TilpasningFull kontroll over logikk, felter og flytAI oppdager felter automatisk; brukeren kan justere
SkalaUbegrenset (med proxyer og planlegging)Scheduled Scraper for gjentakende oppgaver
Håndtering av blokkeringManuell (headere, pauser, proxyer, TLS)Innebygd (Cloud Scraping)
EksportalternativerCSV, JSON (du koder det selv)Google Sheets, Excel, Airtable, Notion — gratis
Best forUtviklere, dataforskere, tilpassede datarørSalgsteam, eiendomsmeglere, driftsledere

Bruk Python hvis du trenger full tilpasning, planlegger å koble det til en større datapipeline, eller vil forstå nøyaktig hva som skjer under panseret. Bruk Thunderbit hvis du vil ha resultater raskt uten å skrive eller vedlikeholde kode. Begge deler er helt legitimt. Det handler om brukstilfelle — og om du helst vil bruke tiden i en terminal eller i en nettleser.

Oppsummering

Craigslist er en rik og kontinuerlig oppdatert datakilde på tvers av bolig, biler, jobber, tjenester, småjobber og mye mer — og uten en offentlig API er skraping den eneste måten å få strukturert data i stor skala. Den metoden som faktisk fungerer i 2025: trekk ut den innebygde JSON-LD-en fra søkeresultatene (ikke skjøre CSS-selectors), bruk requests + BeautifulSoup (ikke Selenium), legg inn realistiske headere med Sec-Fetch-*-felter, varier pauser, og bruk residential proxyer hvis du går utover noen få hundre sider.

JSON-LD-metoden er den største forbedringen sammenlignet med utdaterte guider. Den er raskere, mer robust mot layoutendringer og krever ingen JavaScript-rendering. Kombiner den med anti-ban-strategiene over, så slipper du 403-feilene som velter de fleste scrapers.

Hvis du heller vil droppe koden helt, kan Thunderbit Chrome Extension skrape enhver Craigslist-kategori med et par klikk og eksportere direkte til regnearket eller databasen du foretrekker. Vil du lære mer, dekker guidene våre om hvordan du skraper web med Python og beste praksis for web scraping grunnprinsippene i mer detalj.

Prøv Thunderbit for Craigslist-skraping

Prøv AI Web Scraper for Craigslist-data Get Started Free

Ofte stilte spørsmål

Er det lov å skrape Craigslist?

Craigslist sine bruksvilkår forbyr automatisert skraping og inneholder en klausul om avtalt erstatning ($0,25 per side over 1 000 per dag). Samtidig har nyere rettsavgjørelser — særlig Meta v. Bright Data (2024) og hiQ v. LinkedIn (2022) — innsnevret CFAA-ansvaret for skraping av offentlig tilgjengelige data når du er utlogget. Erstatningskrav etter delstatsrett, som trespass-to-chattels, er fortsatt en risiko, særlig ved kommersiell videredistribusjon. Følg robots.txt, vær utlogget, legg inn pauser og ikke videredistribuer rådata. Dette er generell informasjon, ikke juridisk rådgivning.

Har Craigslist en offentlig API?

Nei. Craigslist tilbyr bare en skrivebasert Bulk Posting Interface (BAPI) for godkjente betalende annonsører. Det finnes ingen offentlig lese-API, ingen utviklerportal og ingen rate-limitert dataplass for uthenting av data. Alle «Craigslist API»-produkter du ser på tredjepartsplattformer, er uoffisielle scrapers.

Hvorfor slutter Craigslist-scraperen min hele tiden å virke?

Nesten alltid på grunn av endringer i HTML-strukturen. Craigslist skrev om søkeresultat-markeringen i 2023–2024, og guider som bruker gamle selectors som .result-row eller .result-info fungerer ikke lenger. Bytt til den innebygde JSON-LD-metoden (parsing av script#ld_searchpage_results) for en mye mer robust løsning. Sjekk også at headerne dine inkluderer Sec-Fetch-*-felter — mangler du dem, blir du ofte blokkert umiddelbart.

Kan jeg skrape Craigslist uten Python?

Ja. Thunderbit sin AI web scraper Chrome-utvidelse fungerer på alle Craigslist-sider — leiligheter, biler, jobber, tjenester. Klikk "AI Suggest Fields" for automatisk å oppdage kolonner, klikk "Scrape" for å hente data, og eksporter til Google Sheets, Excel, Airtable eller Notion gratis. Ingen koding, ingen oppsett, ingen proxy-administrasjon.

Hvor ofte kan jeg skrape Craigslist uten å bli blokkert?

Med én enkelt residential IP er bærekraftig gjennomstrømning omtrent 0,3–0,5 forespørsler per sekund, med tilfeldige pauser på 2–5 sekunder mellom sidene. Hold deg under 1 000 sider per 24-timersperiode per IP for å unngå både blokkering og terskelen for avtalt erstatning i Craigslist sine bruksvilkår. Skraping utenom rushtid (kl. 02–06 lokal tid i målbyen) reduserer blokkeringer med omtrent 30–40 %. Ved større volumer bør du rotere residential proxyer hver 20.–30. forespørsel.

Les mer

Ke
Ke
CTO i Thunderbit | Senior Data Scientist og ML-ekspert Med nesten ti års erfaring innen maskinlæring og datavitenskap er Ke Shen alumnus fra Columbia University og tidligere Senior Data Scientist hos Walmart Labs. Med solid, anerkjent ekspertise i Python, R, Java og statistikk deler han velprøvde innsikter om hvordan komplekse AI-algoritmer kan tas fra teori til produksjonsklar arkitektur.
Innholdsfortegnelse

Hent en nettside bare ved å spørre

Si hva du trenger på vanlig norsk. Eller enda bedre, si ingenting i det hele tatt.

Prøv Thunderbit gratis
Hent data med AI
Overfør enkelt data til Google Sheets, Airtable eller Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week