Skip to content
Integrations and automation7 min read

Importing property listings onto your website

An agent enters a listing in the agency software and then retypes it on their own website. With dozens of properties and their photos that is a full day of work, and the data goes stale. Here is how to solve it and where it usually breaks.

Double entry is expensive in an unexpected way

It is not only the time. It is that the two records drift apart within a week. The price drops in the portal and stays high on the site. A property sells and is still listed. A client calls about something that no longer exists and the agent explains.

If your agency software offers an XML export or another export interface, the website can pick up listings from it regularly. That is the whole basis of the fix: the site fetches the export periodically and reconciles itself against it. At Spolu v realitách we built exactly that on top of the POSKI REAL export.

One source of truth, the site only reads

This is the most important decision and it is made at the start. For this type of integration we keep one system as the source of truth, and the site only reads from it. So the agent never edits the same property in two places.

A listing is edited in the agency software and the site only displays it. The agent works where they are used to. An edit on the site is overwritten by the next run, and that is deliberate, because the site is not the system of record here. Two-way integrations have their place, but they need a clear rule for which system wins for which field. For listings going from agency software to a website, a one-way flow tends to be simpler and more reliable.

Before you commit to two-way sync, settle which record is the authoritative one.

Duplicates come from matching on the title

The classic mistake: the import looks for an existing property by its heading or address. The agent then edits the heading on the site to read better, and the next run creates a second record. A month later the site holds three versions of the same property.

Matching has to use the ID from the portal, never the text. The ID does not change, whatever anyone does to the heading.

Listing sync settings in the WordPress admin
A manual run, a dry run and statistics from the last import. Without those, a fault is hunted in the server log.

What else to watch

The size of the feed

An export with a few hundred properties and thousands of photos can run to tens of megabytes. Loaded into memory in one go, the hosting refuses it. It has to be parsed as it streams, not all at once.

Pointless writes

If every run rewrites all three hundred listings even when nothing changed, the database grows for no reason and the run takes minutes. The fix is a fingerprint of the content: compute a hash, and if it matches, skip the record.

Images

Without de-duplication every run downloads the same photo again and the media library grows into gigabytes. At the same time the order from the feed has to survive, or the main photo ends up wrong.

Controlled vocabularies

Layouts, states and property types arrive as text. If they are not matched against the real field definitions, accents included, half the listings end up with no layout and the filter on the site stops working.

How to tell it is done well

  • The import can be run by hand and has a dry run that shows changes before they are written.
  • You can see when it last ran and what it did.
  • Two runs at once do not get in each other’s way.
  • It is clear what happens to the listings if the add-on is switched off or replaced.

For this integration we chose to map the data into the ordinary fields the site was already built on, not into a table of the add-on’s own. That is why the add-on can be switched off and the site keeps working. A custom table is not automatically wrong, but here it mattered that the add-on could be replaced years later without the site depending on it. How we think about integrations more broadly is covered under integrations.

Frequently asked questions

Should the sync work both ways?

For connecting agency software to a website, usually not. Two-way integrations exist, but they need a clear rule for which system wins for which field. For this type of integration we keep the agency software as the source of truth and the site only reads from it, so the agent never edits the same property in two places.

Will the import slow the site down?

It need not. The feed should be parsed as it streams rather than loaded into memory, and unchanged records should be skipped using a fingerprint of their content. The run then takes seconds rather than minutes.

What happens if we switch the add-on off?

With our integration, nothing. The data is mapped into the site’s ordinary fields rather than into the add-on’s own table, so the listings stay and only stop updating. A custom table is not automatically a mistake, but on this project we wanted the site not to depend on the add-on.

AuthorOndřej Koziorek

Founder and creative director of NKZ. At nkz.dev, leads briefs, UX/UI and the direction of digital products.

More from the notes
Integrations and automation

What to prepare before connecting accounting and your e-shop

Numbering, VAT, returns, payments and errors: what to decide before development.

Read
Websites and WordPress

WordPress: an add-on or a new site?

How to tell whether a custom add-on is enough or it is time for a new site.

Read
Service

Integrations and automation

Connecting systems that pass data by hand today.

About the service