About the client
A group of real estate websites on Umbraco that publish property listings supplied by an external data provider.
Several real estate websites built on Umbraco get their listings from the same provider through a GraphQL API. Each site needs a different set of fields, and listings change often.
OSKI built an import tool that any of these sites can plug in, which also sends visitor actions back to the provider.
What had to be solved
The import had to be flexible per site, fast on large volumes and easy to audit.
- Map GraphQL fields to Umbraco properties, including values inside lists and media.
- Handle different data sets for different websites.
- Import large volumes quickly.
- Decide when an import is actually needed, and keep history, logs and reports.
How the team built it
A Service fetches data, keeps import history, decides whether to run and passes mapping data on. A Library DLL maps GraphQL models to Umbraco documents and fields, creates or updates content and refreshes the cache.
Each mapping pairs a GraphQL field path with an Umbraco property. JSONPath extends this to pull values out of lists, and media is formatted and imported along the way.
Mapping, media import and child page creation run in parallel queues and tasks. Only the affected items get a cache refresh, which cut import time dramatically.
Imports are triggered by changes in the API, and each run stores its details and status. Both parts log their work, and admins receive a completion report or an error email with the logs.
Form integration sends information to the provider, such as viewing appointment requests and tracked events.
What changed
Listing sites stay current without manual content entry, and the same tool serves each new site.
- Imports run much faster thanks to parallel processing and selective cache refresh.
- Every run is recorded, and admins hear about both successes and errors.
- A new Umbraco site adopts the tool by referencing the DLL and registering its services.
Inside the product





