HomeServicesMLS Data IntegrationSpark API
RESO Web API, OData

Spark API feeds, into the site you have.

Spark serves MLS data over the RESO Web API, the same standard as Trestle, Bridge and MLS Grid. We sync it into your WordPress, Laravel or custom site and keep it current every 2 to 3 hours.

Run by
FBS
Protocol
RESO Web API, OData
Refresh, configurable
2 to 3 h
Spark API handshakeIllustration, not a live connection
  1. Authorization: Bearer {token}
    Issued once access is approved.
  2. GET /$metadata
    This MLS's fields and lookups.
  3. $filter=ModificationTimestamp gt {last} and le {now}
    Only what changed since the last run.
  4. @odata.nextLink
    Followed to the end of the set.
  5. ListPrice to price
    Into one listing schema.
An access token issued through your MLS once the feed is approved.
Plainly

Spark is new to us. The standard isn't.

Spark was not one of the feeds on the multi MLS platform we built and ran from 2018 to 2025. It speaks the same RESO Web API, so it uses the same sync engine, paging, purge and parsers. The audit checks your Spark access first, before you commit to anything.

  • Active listingsPending and coming soon included, refreshed every 2 to 3 hours.
  • SoldsWhere your MLS allows them, scoped to your office by default.
  • Agent and office rostersFrom the feed, or built from listings when there is no roster access.
  • Open housesSynced and attached to their listings.
  • Photos and virtual toursCarried through and served from an image CDN with resizing.
  • Map searchBox, drawn polygon, radius and neighborhood, with pin clustering.
The provider

What Spark is

Spark is the developer platform run by FBS, the company behind the Flexmls MLS system. It lets developers request data from participating MLSs once the MLS and its members authorize the application. Access is sold as data plans through the Spark Datamart.

There are two ways in: the Spark API, FBS's own interface, and a RESO Web API endpoint that uses the same keys. The RESO endpoint maps Flexmls fields to the RESO Data Dictionary where it can. The Spark API adds data that RETS never carried, such as saved searches, contacts and market statistics.

Spark was not one of the feeds on the platform we ran. Everything on this page about Spark is taken from its public documentation.

Getting access

How a broker gets access

Spark sells access through its Datamart, but each MLS decides who gets a key.

  1. 1

    Register as a developer

    Registration is free. Spark says activation takes up to 3 business days and comes with demo credentials, which only show sample data.

  2. 2

    Choose the key type

    Most integrations need a bearer token key, with a token that does not expire, tied to one Flexmls user. OpenID Connect keys are for apps where agents sign in with their own Flexmls login.

  3. 3

    Pick a data plan

    In the Datamart, find your MLS and its plans: IDX if listings are shown publicly, VOW if visitors must sign in, or a private plan for back office use. Read the plan terms and pricing.

  4. 4

    Purchase with approval

    Buying the plan starts an email approval chain with the MLS. Spark says issuing keys is up to each MLS.

  5. 5

    Build on demo data, then switch

    The sync is built against the demo credentials and moved to the live key once the MLS approves.

Plan pricing is set per MLS and listed in the Datamart. Your MLS sets the terms.
What the feed carries

What the feed exposes

Spark's RESO Web API docs cover replication in detail. These points shape the sync.

01

Replication endpoint

Keys with replication access must call replication.sparkapi.com. The same requests fail on the regular RESO endpoint.

02

Paging

Replication raises $top to 1,000. Spark recommends following @odata.nextLink, which pages by ListingKey through $skiptoken, over $skip, which can return the same listing twice.

03

Incremental pulls

Changes are found with a $filter on ModificationTimestamp, using both a lower and an upper bound.

04

Purge

Removed listings are found by pulling every ListingKey and deleting local records that are not in the list. Spark says to do this at least once a day.

05

Media and related records

Media, Room, Unit and OpenHouse can come with the listing through $expand. PhotosChangeTimestamp, VideosChangeTimestamp and DocumentsChangeTimestamp show when to fetch them again.

06

Rate limits

1,500 requests per five minutes for an IDX key and 4,000 for VOW and back office keys. Every call counts, nextLink pages included, and Spark makes no exceptions.

From experience

Quirks we already handle.

Spark was not on the platform we ran. These are the things the RESO Web API standard itself brings, and what our sync engine already does with each of them.

Same standard, same engine

Token, metadata, filtered pulls and nextLink paging work the way they do on every RESO Web API feed we have run.

Metadata differs per board

Local fields, lookups and status values differ by MLS. Each one gets its own small filter class on top of the shared parser.

Off market listings

A daily purge removes what left the feed. If the feed returns too few IDs, the purge is skipped and we get an alert.

Display rules

IDX opt out flags and per listing address hiding are honoured, and each board's disclaimer shows the last updated time.

Your stack

Into WordPress, Laravel or your own stack

WordPress

The bearer token does not expire, so it lives as a server side secret and is never used from the browser. The sync runs from a server cron job and keeps an IDX key under 1,500 calls in any five minutes, nextLink pages included. Listings go to their own tables for pages to query.

Laravel

Scheduled queued jobs handle changes, the daily ListingKey purge and media refreshes driven by the change timestamps. A rate limiter set to the key's five minute allowance sits in front of every call, and the replication base URL is kept in config apart from the regular one.

Custom

The RESO endpoint suits a site that may add other feeds later, because it shares field names with them. If you need Flexmls extras like saved searches or market statistics, the Spark API carries those, and both use the same key.

How the switch happens

Old feed stays up until the new one agrees.

Your listings never go blank. The new sync runs beside whatever feeds the site today, and we only switch when the two match.

  1. Audit

    We check your Spark access, your platform and what the site needs to show.

  2. Run the new sync beside the old

    It fills its own tables while your current listings stay up.

  3. Compare

    Counts, statuses, photos and rosters checked against the feed.

  4. Switch and retire

    Pages read from the new sync. The old plugin or script is removed.

Choosing a feed

Spark API or another feed?

Spark is the route for MLSs on Flexmls. If your MLS is also on another platform, the choice comes down to the plan price in the Datamart against the other platform's fees, and whether the request limits fit your market.

Spark's limits are counted per five minutes and cannot be raised. For a large MLS that makes the first full load slower to pace. For a single brokerage site that only pulls changes, the allowance goes further.

TrestleAn hourly quota with a per minute burst, and several MLSs under one account.
Bridge Interactive5,000 requests an hour by default, with photos linked from its CDN.
MLS GridReplication only, with one licence across its participating MLSs.
Start here

MLS feed audit

$499credited to the integration
  • Your MLS access and feed type checked: RESO Web API, RETS, Trestle, Bridge, MLS Grid
  • Your platform, data model and hosting checked
  • Written sync plan: what syncs, how often, what shows where
  • Fixed quote for the integration
Request this package
What happens next
  1. You send the basics.

    Your site's address, what it runs on, and which MLS or feed you have access to.

  2. We check the feed and the site.

    Access, fields, photos, rosters, and how your platform stores listings.

  3. You get a written plan.

    What syncs, how often, what shows where, and a fixed price for the build.

  4. You decide.

    If you go ahead, the $499 comes off the integration.

We are an independent developer. We are not affiliated with, or certified by, any MLS or data provider named on this page.

Other feeds

On a different feed?

FAQ

Before the audit.

Not Spark itself. We have run Trestle, Bridge, MLS Grid and Constellation1 feeds, which use the same RESO Web API standard. The audit checks your Spark access before any build is quoted.
Yes. Your MLS approves it and the license is yours. We work under the credentials you are given.
Active listings every 2 to 3 hours, configurable, with a weekly full re-sync and a daily purge of off market listings.
No. We are an independent developer with no affiliation with FBS or Spark.
Spark allows 1,500 requests in any five minute period for an IDX key and 4,000 for VOW and back office keys. Going over returns a 429, and Spark does not make exceptions.
For listings on a website, the RESO Web API, since its fields match other feeds. Both use the same keys. The Spark API is worth adding for Flexmls extras such as saved searches or market statistics.
Register as a Spark developer, then buy your MLS's data plan in the Spark Datamart. That starts an approval with the MLS, and the key is issued once it signs off.
You can, the first version. Many RETS era feeds were built quickly and broke over the next few years: token changes, board rule changes, photos moving hosts, purges that wiped sites. The audit tells you what you would be signing up for either way.
The feed audit is $499 and credited to the integration. The integration is quoted as a fixed price after the audit.

Find out what your feed needs.

Send the site's address and the feed you have access to. The audit gives you a written plan and a fixed quote.