Skip to main content
Ploti collects official county and city records, such as parcels, permits, zoning and sales, from the public bodies that publish them. A data feed is one of those datasets delivered into your own systems and kept current: you load it once, then Ploti sends what was added, changed and removed each time it changes. There are two kinds of feed. They differ in who decides the shape of the table you receive.

Two problems

Building on public records means solving two problems. The first is getting the records and keeping them current, which every feed solves. Why not collect the records yourself lists what that involves. The second is making them fit your system. If your system can read each dataset as it comes and join them itself, a source feed gives you everything each source has. If it needs one table in one shape, a custom feed has Ploti do the mapping and matching, and keep doing it. Both kinds are delivered the same way and carry the same record id on every row.

Source feeds: each dataset as it is

A source feed is one dataset as its source publishes it. Orange County’s parcels arrive with the Property Appraiser’s columns, and its building permits with the permit office’s. Nothing is dropped or renamed to fit a common schema, so you get everything the source has. Ploti adds what a source does not give you:
  • A record id that stays the same. Every row carries _ploti_record_id. Ploti’s agents match each record to the one before it, so a parcel keeps its id when its owner changes or the county renumbers it. See Record ids.
  • What changed. Each new version says which records were added, changed and removed, instead of handing you the whole file to compare. See Versions and changes.
  • The same envelope on every dataset. Its dataset, place, version, source and the time Ploti read it, so many datasets can sit side by side in one table.
  • One format. Every dataset is a GeoParquet file, whatever the source published.
You decide how the datasets fit together. Load each one as its own table and join them when a question needs it, or build your own combined tables from them. This is how the Ploti app itself works. Its agents read each dataset as published and decide how to combine them for the question in front of them, which is why Ploti does not flatten everything into one schema ahead of time. If your system can do the same, source feeds give it the most to work with.

Custom feeds: the table you describe

Some systems can’t take data as it comes. A product with a fixed parcel table, a CRM with set fields or a model with a fixed input needs the data in one shape before it can load it. A custom feed is that shape. You describe the result in your own words, for example “every parcel with its owner, zoning and flood zone, and every building permit tied to its parcel”. Ploti’s agents then:
  1. Check which datasets Ploti already holds for your coverage areas, and which it would have to collect.
  2. Propose the feed or feeds, with every column and how likely each is to be filled.
  3. Work out how to combine the datasets: by a number the records share, by name and address, or by where they are on the map.
  4. Build the feed once you approve it, and rebuild it as its sources change.
You get one table per kind of thing, such as one row per parcel and one row per permit. When Ploti proposes more than one feed, the feeds point at each other by record id, so a permit row holds the record id of its parcel. Custom feeds walks through asking for one and reading the proposal.

Which one to use

Ask whether your system needs the data in a set shape before it can load it.
  • No. Use source feeds. You keep every column, you see each source’s changes as the source made them, and you can combine the datasets differently for each use.
  • Yes. Use a custom feed. Ploti does the combining and keeps doing it, and you load a table that already matches your schema.
Many teams use both: a custom feed fills the fixed tables their product reads, and source feeds land in a warehouse for analysis nobody has planned yet.

What is not a feed

A feed keeps arriving. Reading rows for one question, or downloading a dataset once, gives you the records as they are at that moment and nothing after. Those are in Query Ploti directly. Use them when you only need what one question asks for.