AnchorBuild a local real estate listing dataset with Full and Delta exports

Build a local dataset for the listings your team needs. Begin with a ready receiver and active live service, request a Full export to establish the initial selection, and run Delta exports to reconcile gaps every seven days. Run an additional Delta export after a delivery issue or receiver recovery.

Each export contains source Classified snapshots. A Classified is a source listing, not a deduplicated property, so this workflow does not create an unfiltered copy of Immoteur's database or one record per property.

AnchorEstablish your first dataset with a Full export

Before you request the first Full export, make the receiver ready and activate a classified-notification-single or classified-notification-batch service with onlyNew set to false and a filter scope compatible with classified-export. Keep that live service active while the Full export establishes the initial dataset and while later Full or Delta exports run.

Configure a classified-export service for the filters and account access your team needs. A Full export selects the public-exportable listings that currently match that scope, including eligible removed listings. It may have no data batches when nothing matches, or deliver full Classified snapshots in one or more batches.

Public export eligibility is limited to France. Eligible listings have a French location with city INSEE code, city name, postcode, and department; a property type, transaction price and type; a euro currency or no currency; and a known value for whether the publisher is professional.

They also have a visible linked Property. Service filters and account access can narrow that scope, but cannot select a listing in another country.

Prepare the receiver before you request the export. Durably store or enqueue each received export delivery, including data batches and the terminal message, before returning 2xx. Your worker can then upsert each source snapshot by classified.id.

AnchorKeep the dataset current with live notifications

Use classified-notification-single when your receiver handles one snapshot per live event. Use classified-notification-batch when it handles batches. Set onlyNew to false when the live service must receive eligible updates as well as newly created listings.

Keep the live service separate from classified-export, even when both use the same receiver URL. The two services must use compatible filter scopes, but live notifications can still include records outside the Full export's public-exportable scope.

Handle those records separately in your local model. Persist or enqueue a complete delivery before returning a 2xx response, then let your own worker apply it.

AnchorReconcile gaps with Delta exports

Schedule Delta exports every seven days, even when live notifications are healthy. A meta.lastSeenAt-only revisit does not emit a live notification, so Delta reconciliation also covers changes that live delivery leaves out.

A Delta export requires a successful baseline compatible with the current filter scope and created no more than eight days earlier. Schedule the weekly run with enough time for a successful export before that eligibility window ends. If the baseline is missing, expired, or tied to different filters, the requested Delta export can be delivered as a Full export instead.

Process the delivered exportType, which tells you whether the export is effectively full or delta. Changing only the receiver URL does not make a compatible baseline invalid.

Rendering diagram...

AnchorConfirm export completion from the delivery

A terminal export message has an empty items array and isComplete: true. Do not infer completion from a chunk count, delivery order, or a period with no messages. Keep your own idempotency and completion records so retries and interrupted receivers can be handled deliberately.

AnchorKeep source snapshots separate from local work

Store the received source snapshot separately from your team's annotations, scores, CRM stages, and analysis fields. An incoming listing update can then replace the source data without erasing local work.

Upsert each source snapshot by classified.id and keep a durable idempotency record. Do not let arrival order, chunk position, delivery ID, or retry count decide which source snapshot wins.

Use meta.lastModifiedAt to prefer newer normalized source updates, but do not treat meta.lastModifiedAt and meta.lastSeenAt as a complete ordering key. With equal timestamps, still apply a changed propertyId relationship because clustering can emit that change without updating either timestamp.

If the relationship and source fields are unchanged, a later meta.lastSeenAt can record a revisit without overwriting newer source data.

A listing absent from a later export is not, by itself, a deletion command for your database.

AnchorKeep listing and property scope clear

Keep classified.id and propertyId as separate values. A Property groups related listings for an underlying asset, but a listing or property can also represent a programme with multiple dwellings.

When a snapshot contains price history, retain it as source evidence. Do not turn prices, areas, or room counts from a programme-level group into a complete history for one dwelling.

AnchorImplement the documented delivery contract

Use the classified-export reference for the export envelope and its fields. Read the local data mirror guide for the Full, live, and Delta workflow.

Read the webhook delivery guide for acknowledgement, retries, and idempotency. Consult the API resource guide when your application also retrieves listings or properties directly.

Create an account at Immoteur sign-up when the selected scope is ready to configure.