Skip to content
ServoForSale

For CRM providers & brokers

Listing feed integration

Brokers list once in their CRM and Servo For Sale stays in sync. We accept the REAXML-style XML most Australian agency CRMs already export, so adding us is usually just a new portal destination.

Push

Your CRM POSTs XML to our endpoint with the agency's API key whenever a listing changes.

Pull

Give us a URL to your agency's XML file. We fetch it every hour.

CSV

Brokers upload a spreadsheet from their dashboard. Ideal for getting started.

Authentication

Each agency creates an API key in Dashboard → Import & feeds. Send it as a bearer token. Keys are shown once and stored hashed; creating a new key revokes the old one.

curl -X POST https://www.servoforsale.com.au/api/feeds/xml \
  -H "Authorization: Bearer sfs_xxxxxxxx_yourSecretKey" \
  -H "Content-Type: application/xml" \
  --data-binary @listings.xml

REAXML-style feed

Send <business> listings (operating businesses) and <commercial> listings (freehold fuel investments) inside <propertyList>. You can send the agency's whole feed: we only import listings whose category, headline or description indicates a service station, petrol station, roadhouse or truck stop, or that include a <servoDetails> block.

  • uniqueID identifies the listing; resending it updates the listing.
  • status="sold", "withdrawn" or "offmarket" takes it down. <underOffer value="yes"/> marks it under offer.
  • <address display="no"> makes it a confidential listing (region shown, suburb hidden).
  • Images are copied to our CDN; id="m" is the cover photo. Max 20 per listing.
  • <servoDetails> accepts any field from the table below, so buyers can filter on litres, brand and model.
<?xml version="1.0" encoding="UTF-8"?>
<propertyList>
  <business modTime="2026-10-29-09:30:00" status="current">
    <agentID>ABC123</agentID>
    <uniqueID>SS-1042</uniqueID>
    <listingAgent id="1">
      <name>Jane Broker</name>
      <telephone type="mobile">0400 000 000</telephone>
      <email>jane@agency.com.au</email>
    </listingAgent>
    <price display="yes">650000</price>
    <priceView>$650,000 + SAV</priceView>
    <address display="yes">
      <streetNumber>12</streetNumber>
      <street>Great Western Hwy</street>
      <suburb>Penrith</suburb>
      <state>NSW</state>
      <postcode>2750</postcode>
    </address>
    <businessCategory id="1">
      <name>Automotive</name>
      <businessSubCategory>Service Station</businessSubCategory>
    </businessCategory>
    <headline>High-volume Ampol commission site</headline>
    <description>Commission agency on a major arterial…</description>
    <takings>2100000</takings>
    <netProfit>265000</netProfit>
    <underOffer value="no"/>
    <images>
      <img id="m" url="https://cdn.agency.com.au/ss-1042/1.jpg"/>
      <img id="a" url="https://cdn.agency.com.au/ss-1042/2.jpg"/>
    </images>
    <!-- Optional: any Servo For Sale field REAXML has no element for -->
    <servoDetails>
      <brand>Ampol</brand>
      <operating_model>commission_agent</operating_model>
      <fuel_litres_per_month>520000</fuel_litres_per_month>
      <shop_sales_per_week>38000</shop_sales_per_week>
      <commission_cpl>2.4</commission_cpl>
      <lease_years_remaining>9</lease_years_remaining>
      <features>car_wash|24_7|food_service</features>
    </servoDetails>
  </business>
</propertyList>

Native XML and CSV

The native format uses the same field names as the CSV template. Every column is optional except external_ref, title, state, a suburb or region, and a price (or price_on_application).

<?xml version="1.0" encoding="UTF-8"?>
<servoListings>
  <listing>
    <external_ref>SS-1042</external_ref>
    <status>current</status>
    <kind>business</kind>
    <title>High-volume Ampol commission site</title>
    <price>650000</price>
    <state>NSW</state>
    <suburb>Penrith</suburb>
    <postcode>2750</postcode>
    <brand>Ampol</brand>
    <operating_model>commission_agent</operating_model>
    <fuel_litres_per_month>520000</fuel_litres_per_month>
    <image_urls>https://cdn.agency.com.au/1.jpg|https://cdn.agency.com.au/2.jpg</image_urls>
  </listing>
</servoListings>

CSV columns: external_ref, status, kind, title, summary, description, price, price_max, price_display, price_plus_sav, price_on_application, state, region, suburb, postcode, is_confidential, business_name, street_address, brand, operating_model, supply_agreement_expiry, tenure, lease_years_remaining, lease_expiry, lease_options, rent_pa, fuel_litres_per_month, shop_sales_per_week, annual_turnover, ebitda, commission_cpl, fuel_grades, features, tank_count, tank_install_year, last_tank_test, land_area_sqm, building_area_sqm, trading_hours, staff_count, established_year, net_income_pa, yield_pct, tenant_name, wale_years, contact_name, contact_phone, contact_email, nda_required, image_urls. Download the template.

Field values

kindbusiness | freehold_going_concern | freehold_investment
operating_modelcommission_agent | franchise | dealer_supply | independent | company_operated | other
tenureleasehold | freehold
brandAmpol, BP, Shell, Reddy Express, 7-Eleven, Caltex, United, Puma, Liberty, Metro, Mobil, EG, OTR, Speedway, Astron, Pearl, Independent, Other
featurescar_wash, workshop, lpg, ev_charging, truck_stop, adblue, food_service, qsr, liquor, post_office, accommodation, atm, gas_bottles, 24_7 (separate with |)
fuel_gradesULP, E10, P95, P98, Diesel, Premium diesel, LPG, AdBlue, E85 (separate with |)
statuscurrent | under_offer | sold | withdrawn | offmarket
datesYYYY-MM-DD (lease_expiry, supply_agreement_expiry, last_tank_test)
money / numbersPlain numbers; $ and commas are stripped
booleansyes / no, true / false, 1 / 0

Response

200 with a summary when anything was processed, 401 for a bad key, 413 over 20 MB, 422 when nothing could be imported. Listings from agencies we haven't verified yet wait for review before going live.

{
  "created": 3,
  "updated": 12,
  "withdrawn": 1,
  "skipped": 40,
  "errors": [{ "ref": "SS-1077", "message": "state: Choose a state" }]
}

Need a different format or a direct API? Talk to us. We're happy to work with CRM vendors on a native integration.