Craigslist Listings — XML Feed Schema

Bulk-import Craigslist Services and Real Estate listings using a single XML file. Each listing fans out into one posting intent per Craigslist city market. Maximum file size: 20 MB, UTF-8 encoded.

← All listings guides · CSV upload guide

How to upload

  1. Sign in to your JobStak client portal.
  2. Go to CL Listings → Import XML/CSV.
  3. Choose a .xml file and click Upload & Process.
  4. Each <listing> is validated independently. Valid listings are added; invalid rows are skipped with a per-row reason.

Document structure

Common fields (all listing types)

FieldRequiredTypeNotes
external_reference_idRecommendedstringYour unique ID. Used for deduplication on re-upload.
listing_typeRequiredenumservice | real_estate_rent | real_estate_sale
titleRequiredstring (5–70)Plain text. Avoid ALL CAPS and emoji-spam.
description_htmlRequiredHTML / textWrap in CDATA. ≥ 20 chars of visible text after stripping tags.
cityRequiredstringPhysical city of the listing.
state_regionRequiredstringState or region code.
contact_emailOne requiredemailEither contact_email or contact_phone.
contact_phoneOne requiredstringE.164 or local format.
canonical_urlOptionalURLMust be valid http(s) when present.
city_marketsRequiredlistRepeat one <city> child per Craigslist slug.

Service fields

Required when listing_type = service.

FieldRequiredNotes
service_typeRequirede.g. cleaning, moving, lessons, handyman.
price_typeRequiredfixed | hourly | starting_at | quote_required
price_minConditionalRequired unless price_type = quote_required.
price_maxOptionalprice_min if provided.
service_area_modeOptionalonsite | remote | mobile | hybrid
service_radius_milesOptionalCannot be set when service_area_mode = remote.
business_nameOptionalShown in posting body.

Real estate fields

Required when listing_type = real_estate_rent or real_estate_sale.

FieldRequiredNotes
listing_intentRequiredMust be rent or sale matching listing_type.
property_typeRequiredapartment, house, condo, townhouse, room, etc.
priceRequired> 0 USD.
depositOptional≥ 0 (rentals).
sqftOptionalInteger.
bedroomsOptional0 = studio.
bathroomsOptionalAllows 0.5 increments.
available_dateOptionalYYYY-MM-DD.
pets_allowedOptionalyes / no.
furnishedOptionalyes / no.

Validation rules

Full XML example

<?xml version="1.0" encoding="UTF-8"?>
<listings>
  <listing>
    <external_reference_id>SVC-001</external_reference_id>
    <listing_type>service</listing_type>
    <title>Eco-Friendly House Cleaning</title>
    <description_html><![CDATA[<p>Weekly or one-time cleaning with non-toxic products.</p>]]></description_html>
    <city>Austin</city>
    <state_region>TX</state_region>
    <contact_email>hello@example.com</contact_email>
    <service_type>cleaning</service_type>
    <price_type>hourly</price_type>
    <price_min>45</price_min>
    <price_max>75</price_max>
    <city_markets>
      <city>austin</city>
      <city>sanantonio</city>
    </city_markets>
  </listing>
</listings>

Programmatic upload

curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@listings.xml" \
  https://ipuanzeiogwtxvberefu.supabase.co/functions/v1/upload-listings-feed