IDX BulkData provides a convenient, programmable resource for users who want to access, store, and manage MLS data on their own. You can use the BulkData API to access over 600+ MLS’ data with multiple usable endpoints. The data has been sanitized to follow industry standard, so users can be confident they are getting consistent data even across different MLS systems. The data is updated hourly, but it is also possible to do full and/or incremental updates of the resources as needed.
Endpoints | Description |
---|---|
Token | This endpoint is used to obtain an AccessToken, which is required for downloading listings, images, agents, and offices. This token can also be used to check MLS permission and is different than x-api-key. This token will expire hourly. |
MLSInfo | This endpoint is used to obtain overall MLS feed info including property count, property statuses, property types, property sub-types, agent count, office count, and last updated. |
Listings | This endpoint provides data for individual listings, such as acres, square feet, price, bedrooms, and bathrooms. |
Images | This endpoint provides image data such as high resolution url, thumbnail URL, and captions. |
Agents | This endpoint provides agent data such as agent name, agent ID, office ID, email, and phone number. |
Offices | This endpoint provides office data such as office name, office ID, and phone number. |
https://data-services.idxbroker.com/beta/live/token
The Token endpoint requires a POST request as well as username and password in the request body, and x-api-key in the header. This will return an AccessToken, which is required for the mlsinfo and property resource endpoints. The AccessToken is set to expire every hour and must be replaced in order to continue using mlsinfo and property resource endpoints.
Parameter | Required |
---|---|
x-api-key | ✅ |
Parameter | Required |
---|---|
username | ✅ |
password | ✅ |
{
"accessToken": "eyJraWQiOiJ1cGlT....."
}
https://data-services.idxbroker.com/beta/live/mlsinfo
The Mlsinfo endpoint requires AccessToken and x-api-key in the request headers. The mlsinfo provides an overview of MLS data, such as listing count, agent count, office count, and last updated date.
Parameter | Required |
---|---|
AccessToken | ✅ |
x-api-key | ✅ |
Parameter | Required | Addtional |
---|---|---|
idxID | ❌ | Allow one or multiple e.g. idxID=a001 or idxID=a001,a002 |
limit | ❌ | Only allow one and maximum is 10. e.g. limit=5 |
offset | ❌ | e.g. offset=20 |
xxxxxxxxxx
{
"a001": {
"idxID": "a000",
"listingCount": 999,
"propTypes": [
{
"mlsPtID": 1,
"mlsName": "RES",
"subTypes": {
"active": [
"Single Family Residence",
"..."
],
"sold": [], // Optional
}
}
],
"propStatuses": [
"Active",
"..."
],
"agentCount": 999,
"officeCount": 999,
"lastUpdated": "2017-10-03T22:49:23.000Z"
}
}
All property resource endpoints (listings, images, agents, and offices) require an AccessToken and x-api-key in the request headers.
https://data-services.idxbroker.com/beta/live/listings
Parameter | Required |
---|---|
AccessToken | ✅ |
x-api-key | ✅ |
Parameter | Required | Addtional |
---|---|---|
idxID | ✅ | Only allow one e.g. https://data-services.idxbroker.com/beta/live/listings?idxID=a001 |
listingID | ❌ | Allow one or multiple listingID e.g. listingID=x0000001 or listingID=x0000001,x0000002 |
statusCategory | ❌ | Allow one or multiple statusCategory - active, sold, offmarket e.g. statusCategory=active or statusCategory=active,sold |
mlsPtID | ❌ | Allow one or multiple mlsPtID e.g. mlsPtID=1 or mlsPtID=1,2 |
updated | ❌ | (gt, gte, lt, lte):YYYY-MM-DDThh:mm:SS Allow one or multiple updated e.g. updated=gt:2017-01-01 or updated=gt:2017-01-01,lt:2017-02-01 |
limit | ❌ | Only allow one and maximum is 500. e.g. limit=499 |
offset | ❌ | e.g. offset=1000 |
select | ❌ | Allow one or multiple select. e.g. select=listingID or select=listingID,idxID |
xxxxxxxxxx
{
"total": 999,
"first": "...",
"last": "...",
"next": "...",
"previous": "...",
"data": [
{
"docType": "listing",
"idxID": "a000",
"mlsPtID": 1,
"listingID": "33672",
"metaFields": {
},
"coreFields": {
"acres": 0.08,
"address": {
// ...
},
"bedrooms": 3,
"cityName": "Hillsboro",
"countyName": "Washington",
"fullBaths": 1,
"listingPrice": 450000,
"partialBaths": 0,
"status": "Active"
"type": "Residential"
},
"advancedFields": {
// ...
},
"mutatedFields": {
// ...
},
"lastUpdated": "2018-09-17T11:00:00+00:00"
},
]
}
https://data-services.idxbroker.com/beta/live/images
Parameter | Required |
---|---|
AccessToken | ✅ |
x-api-key | ✅ |
Parameter | Required | Addtional |
---|---|---|
idxID | ✅ | Only allow one, e.g. idxID=a001 |
listingID | ❌ | Allow one or multiple listingID e.g. listingID=x0000001ororlistingID=x0000001,x0000002 |
updated | ❌ | (gt, gte, lt, lte):YYYY-MM-DDThh:mm:SS Allow one or multiple updated e.g. updated=gt:2017-01-01 or updated=gt:2017-01-01,lt:2017-02-01 |
limit | ❌ | Only allow one and maximum is 500.e.g.limit=499 |
offset | ❌ | e.g. offset=1000 |
xxxxxxxxxx
{
"total": 999,
"first": "...",
"last": "...",
"next": "...",
"previous": "...",
"data": {
"33672": { // listingID
"1": { // priority
"caption": "Main View",
"hires": {
"url": "https://..."
}
}
}
}
}
Images data uses listing ids and priorties as keys.
https://data-services.idxbroker.com/beta/live/agents
Parameter | Required |
---|---|
AccessToken | ✅ |
x-api-key | ✅ |
Parameter | Required | Addtional |
---|---|---|
idxID | ✅ | Only allow one, e.g. idxID=a001 |
agentID | ❌ | Allow one or multiple agentID e.g. agentID=V211511918 or agentID=V211511918,V211512197 |
officeID | ❌ | Allow one or multiple officeID e.g. officeID=V3600 or officeID=V3600,V6241 |
updated | ❌ | (gt, gte, lt, lte):YYYY-MM-DDThh:mm:SS Allow one or multiple updated e.g. updated=gt:2017-01-01 or updated=gt:2017-01-01,lt:2017-02-01 |
limit | ❌ | Only allow one and maximum is 500. e.g. limit=499 |
offset | ❌ | e.g. offset=1000 |
select | ❌ | Allow one or multiple select. e.g. select=agentID or select=agentID,idxID |
xxxxxxxxxx
{
"total": 999,
"first": "...",
"last": "...",
"next": "...",
"previous": "...",
"data": [
{
"idxID": "a000",
"agentID": "123456",
"officeID": "654321",
"name": "Demo Developer",
"email": "developers@idxbroker.com",
"primaryPhone": "800-421-9668"
"lastUpdated": "2018-9-17T11:00:00+00:00"
},
]
}
https://data-services.idxbroker.com/beta/live/offices
Parameter | Required |
---|---|
AccessToken | ✅ |
x-api-key | ✅ |
Parameter | Required | Addtional |
---|---|---|
idxID | ✅ | Only allow one, e.g. idxID=a001 |
officeID | ❌ | Allow one or multiple officeID e.g. officeID=V3600 or officeID=V3600,V6241 |
updated | ❌ | (gt, gte, lt, lte):YYYY-MM-DDThh:mm:SS Allow one or multiple updated e.g. updated=gt:2017-01-01 or updated=gt:2017-01-01,lt:2017-02-01 |
limit | ❌ | Only allow one and maximum is 500. e.g. limit=499 |
offset | ❌ | e.g. offset=1000 |
select | ❌ | Allow one or multiple select. e.g. select=officeID or select=officeID,idxID |
xxxxxxxxxx
{
"total": 999,
"first": "...",
"last": "...",
"next": "...",
"previous": "...",
"data": [
{
"idxID": "a001",
"officeID": "654321",
"email": "developers@idxbroker.com",
"primaryPhone": "800-421-9668"
"name": "IDX Broker",
"lastUpdated": "2018-9-17T11:00:00+00:00"
},
]
}
Good request.
Missing AccessToken or Invalid AccessToken
The HTTP resource may not be supported (URL may be incorrect).
The MLS has undergone migration. If there is an equivalent MLS, the response will return the new idxid. If there is no equivalent MLS, the idxid will be null and you should contact developers@idxbroker.com.
The query value is invalid. The response will include the specific value.
The backend service is down. Please contact developers@idxbroker.com.
We recommend beginning with a full update, and then running incremental updates every hour rather than hourly full updates.
The BulkData API postman collection is an easy way to look at data.
statusCategory
query parameter on listings endpointselect
query parameter on listings, agents, and offices endpointspropStatus
query parameter on listings endpointmlsPtID
query parameter on listings endpointpropType
query parameter on listings endpoint