Listing distribution API

One API. Every property portal.

Publish, update and synchronize property listings across every portal without maintaining individual integrations.

  • 30+ portals
  • 1 normalized schema
  • Automatic retries
  • Webhooks

Request

PUT /v1/listings/lst_123

{
  "title": "2 bedroom apartment",
  "price": 450000,
  "distribution": [
    "idealista",
    "imovirtual",
    "rightmove"
  ]
}
  • IdealistaPublished
  • ImovirtualPublished
  • RightmoveSyncing

Abstraction

Your appListflow APIIdealista · Imovirtual · Rightmove · Zoopla · …

Connect to 30+ property portals

View all portals →
IdealistaImovirtualFotocasaRightmoveZooplaGreen-Acres+24
The problem

Stop building portal integrations.

Every property portal has its own API, XML format, authentication, validation rules and operational quirks. Your CRM speaks Listflow. Listflow speaks every portal.

One schema

Normalize listing data once.

One API

Create, update and delete everywhere.

One webhook model

Receive publishing status consistently.

One integration

Listflow maintains portal-specific changes.

One integrationOne API → N portals
01

Your application

CRM, PMS, or product

02

Listflow

Canonical model + adapters

03Portals
Live sync
  • IdealistaOK
  • ImovirtualOK
  • FotocasaOK
  • KyeroOK
Declarative sync

Tell us where the listing should be

Developers do not manage individual CREATE/UPDATE/DELETE calls per portal. Declare the desired distribution — Listflow converges actual portal state to match.

Declarative syncDesired → actual
01Desired

Declare the distribution once. No per-portal create, update, or delete calls.

distribution.jsonjson
{
  "idealista": "published",
  "imovirtual": "published",
  "greenacres": "unpublished"
}
02Actual
Converging
  • Idealista

    Wanted Published

    Published
  • Imovirtual

    Wanted Published

    Syncing
  • GreenAcres

    Wanted Unpublished

    Unpublished
Universal schema

One property model

Instead of translating your CRM model separately for every portal, map your data to Listflow once. Listflow translates the canonical listing into each portal schema.

Universal schemaMap once → translate many
01Listflow Listing

One canonical property model. Map your CRM fields here — not to every portal.

listing.jsonjson
{
  "id": "property_123",
  "operation": "sale",
  "type": "apartment",
  "price": 450000,
  "currency": "EUR",
  "bedrooms": 3,
  "bathrooms": 2,
  "area_m2": 98,
  "location": {
    "city": "Lisbon",
    "country": "PT"
  },
  "media": [
    { "url": "https://cdn.example/1.jpg" }
  ]
}
02Portal schemas
Adapters
  • Idealista

    Portal schema

    Mapped
  • Imovirtual

    Portal schema

    Mapped
  • Fotocasa

    Portal schema

    Mapped
  • Rightmove

    Portal schema

    Mapped
  • …and more portals
Portal intelligence

We handle the portal rules

Portal quirks stay behind a predictable interface. Your app sees structured API responses — not opaque feed failures.

Portal intelligenceQuirks → structured API
01Rules we absorb

Validation, auth, feeds, retries, and portal-specific quirks — handled once behind Listflow.

  • Required fields
  • Type mappings
  • Image rules
  • Location maps
  • Authentication
  • Rate limits
  • XML feeds
  • REST APIs
  • Retries
  • Portal errors
  • Remote IDs
  • Pub status
02What you get
Predictable

Portal failures become structured API responses. Validate early and keep retries deterministic.

error.jsonjson
{
  "code": "MISSING_REQUIRED_FIELD",
  "portal": "imovirtual",
  "field": "energy_certificate",
  "retryable": false
}

Missing fields, portal codes, and retryability — all explicit.

Reliability

Listings eventually arrive where they should

Listflow treats distribution as a convergence problem: desired state in, reconciled portal state out — with isolation so one portal never blocks another.

ReliabilityDesired → reconciled
01Convergence path
  • 01Listing changedEvent in
  • 02Desired stateDeclared
  • 03QueueAsync
  • 04ConnectorPer portal
  • 05PortalPublish
  • 06ReconciliationConverged
02Guarantees
Isolated

One portal failing never blocks another. Retries, idempotency, and reconciliation keep state converging.

  • Asynchronous publishing
  • Automatic retries
  • Idempotent operations
  • Versioned listings
  • Rate-limit handling
  • Reconciliation
  • Per-portal isolation
API

A small API for a complicated problem

The public surface stays small even as portal complexity grows. Integrate once; extend coverage without changing your application contract.

api.listflow.devSmall surface · v1
01Endpoints
  • PUT/v1/listings/:idUpsert listing
  • GET/v1/listings/:idFetch listing
  • PUT/v1/listings/:id/distributionSet desired state
  • GET/v1/listings/:id/distributionRead sync status
  • POST/v1/listings/:id/validateValidate early
  • GET/v1/portalsList portals
  • GET/v1/portals/:portal/schemaPortal schema
02Your contract
Stable

Integrate once. Portal complexity grows behind the same application contract.

  • Small surface

    A handful of endpoints cover the hard parts.

  • Stable contract

    Add portals without rewriting your integration.

  • Composable

    Upsert, distribute, validate — same listing id.

SDK exampleUpsert → distribute
01publish.ts

One upsert. One distribution call. Listflow handles the portals.

publish.tsts
import { Listflow } from "@listflow/sdk"

const listflow = new Listflow({
  apiKey: process.env.LISTFLOW_API_KEY
})

await listflow.listings.upsert({
  id: "property_123",
  operation: "sale",
  type: "apartment",
  price: 450000,
  currency: "EUR",
  bedrooms: 3,
  location: {
    city: "Lisbon",
    country: "PT"
  }
})

await listflow.distribution.set("property_123", {
  idealista: "published",
  imovirtual: "published",
  greenacres: "published"
})
02Live distribution
Live

Listing

property_123

3 portals
  • IdealistaPublished
  • ImovirtualPublished
  • Green-AcresPublished
Use cases

Built for the systems that already own inventory

Listflow sits under CRMs, marketplaces, proptech products and agents — not beside them as another agency tool.

Use casesYour system → Listflow
01Who it is for
  • CRM platforms

    Add portal export without maintaining dozens of integrations.

  • Property marketplaces

    Distribute inventory to downstream listing channels.

  • Proptech products

    Make listing distribution a feature instead of an integration project.

  • AI agents

    Publish property inventory through deterministic tools and schemas.

02How it fits
Infrastructure

Listflow is the distribution layer under products that already own inventory — not another tool beside them.

  • Sits under your stack

    Infrastructure for systems that already own inventory.

  • Not an agency tool

    Built for product and platform teams, not side workflows.

  • One integration surface

    Ship portal coverage as a product feature, not a project.

Portals

One integration, growing portal coverage

Portal names below are placeholders while connectors ship. Statuses reflect current planning — not live availability claims.

In developmentRequested
Requested

Idealista

ES / PT / IT

In development

Imovirtual

PT

In development

OLX

BR

In development

Properstar

BR

Requested

Fotocasa

ES

Requested

Green-Acres

EU

Requested

Kyero

EU

Requested

Rightmove

UK

Requested

Zoopla

UK

Requested

Immobiliare

IT

Pricing

Simple tiers. Pricing coming soon.

No invented numbers. Tell us about your volume and portal needs — we will follow up with a plan that fits.

Soon
Developer
For testing and small projects.

Pricing coming soon

  • Sandbox keys
  • Core listing API
  • Community support
Soon
Growth
For production applications and larger listing volumes.

Pricing coming soon

  • Production volume
  • Multi-portal sync
  • Priority support
Soon
Enterprise
For high volume, custom portal integrations and support.

Pricing coming soon

  • Custom connectors
  • SLA & SSO
  • Dedicated support

Stop building portal integrations.

Build once with Listflow and distribute listings everywhere.