INFABODE
ANYWHERE
Overview
Our Data
AI Connectors
Pricing
Sign In
Get Started
Contents
Setup
Content Types
Locations
Industry Sectors
Entities
Post Filter Feed
Post Authorization
Posts - Standard Filters
Posts - Location Filters
Posts - GeoLocation Filters
Posts - Queries & Examples
Data Extraction - Research
Research Extraction - Queries & Examples
Data Extraction - Transactions
Transaction Extraction - Queries & Examples
AI Content - Posts Extended
AI Content - Smart Posts
AI Content - Smart Research Data
AI Content - Smart Transactions Data
Contact / Support
Infabode Developer Documentation
Technical references, queries and examples for the Infabode GraphQL API V2
New to the Infabode API? Start with the real estate data API overview for access routes, coverage and pricing.
Setup
Production Endpoints
GraphiQL IDE
https://infabode.com/graphiql
API
https://infabode.com/api
api-key
Provided when you become an API partner. Contact us at hello@infabode.com
Access
API keys have different access to certain content types and data extractions. Check your agreement covers the sections you are testing from this documentation.
Machine-Readable API Specification
Download the OpenAPI specification for use with tools like Postman, Insomnia, or AI assistants:
Download OpenAPI Spec (JSON)
Alternatively you can pass this link to AI Assistants which should enable them to read this page:
https://ia.infabode.com/openapi.json
Playground Setup
Step One:
Make sure you are calling production data, our staging data is outdated.
Step Two:
Add api-key as the header name and then insert your provided API key.
Content Types
ID Name Notes
1 Research Documents
2 Industry Insights
3 Market News
4 Sale Listings (on request)
6 Job Openings (on request)
8 Lease Transactions
9 Sale Transactions
10 Lease Listings (on request)
Locations
Locations are organized according to the following hierarchy. For a full list of locations and IDs click here.
Type Description Example 1 Example 2
global general level
continent continent level Europe North America
country country level United Kingdom United States
sub1 inner-country level England New York
sub2 inner-country level Greater London
city city/town level London New York
sub3 inner-city level Central London The Bronx
sub4 inner-city level Westminster
sub5 inner-city level
Industry Sectors
ID Sector Subsectors
18 General Market
1 Office Flexible Offices [1011], Business Parks [1012]
2 Retail High Street [1021], Retail Parks [1022], Malls/Shopping Centers [1023], Supermarkets [1024], Factory Outlets [1025], Restaurant/Pubs [1026]
11 Mixed Use
4 Residential Multi-Family/PRS [1041], Owner/Occupier [1042], Short Term Rentals [1043], Social Housing [1044]
8 Hotels Resorts [1081], Luxury [1082], Budget [1083]
7 Student Accommodation Student Halls/Accommodation [1071], University Campus [1072]
6 Industrial Heavy Industrial/Manufacturing [1061], Light Industrial [1062], Energy Plants [1063]
12 Logistics
14 Alternative sectors Airports [1141], Marinas [1142], Leisure/Entertainment [1143], Brewery [1144], Data Centers [1145], Self Storage [1146], Research Centers [1147]
19 Healthcare Care Homes [1191], Senior Housing [1192], Private Healthcare [1193]
20 Infrastructure Roads [1201], Railway [1202], Bridges [1203], Telecommunications [1204], Schools/Universities [1205], Police Stations/Prisons [1206], Hospitals/Doctor Surgery [1207]
21 Planning & Construction Development Land [1211], Planning [1212], Construction [1213], Regeneration [1214]
17 Rural Agricultural Land [1171], Vineyards [1172], Timber/Forestry [1173]
10 Technology Services [1101], Products [1102]
9 Sustainability Renewable Energy [1091], Social Impact [1093], Building Sustainability [1092]
3 Investment Vehicles Property Companies/REITs [1031], Real Estate Property Funds [1032], Real Estate Debt Funds [1033]
5 Capital Markets & Economics Politics [1051], Capital Markets [1052], General Economy [1053]
16 Debt Mortgages [1161], Bonds [1162], Securitized Debt [1163]
15 Legal
13 Accounting/Tax
22 Real Estate Companies People [1221], Mergers & Acquisitions [1222], Financial Results [1223]
Entities
To see a full list of companies and funds on Infabode, as well as their IDs, click here. The main fields for organizations:
Key Fields:
id - unique id
name - Company name
links - List of social links
bio - Short company bio
ibOrgTypes - Set of the company types
isSubscriptionRequired - Company data required a subscription
location - Location
logoS3 - Logotype
bannerS3 - Company banner
mentions - Company mentions in the Infabode posts
insertedAt - release date
updatedAt - The date the post was edited
1. Search by name
{
organizations(filter: { name: "Savills" }, order: NEWER) { id name }
}
Where:
order:
• NAME_ASC
• NAME_DESC
• NEWER (as published_at DESC)
• OLDER (as published_at ASC)
• RELEVANCE
filter:
• name - search by company name
• email - search by company email
• isEnabled - dormant company or not
• isExternal - is external or not
• isPaid - with paid (or not) content
• isPublic - public or not
—[response]—
{
"data": {
"organizations": [
{
"name": "Savills Investment Management",
"id": 79439
},
{
"name": "Savills PLC",
"id": 50428
}
]
}
}
2. Search by source type
By any of type from the list:
{
organizations(filter: {ibOrgTypes_Any: [CONTENT_PROVIDER]}) {
id
name
}
}
By all of types from the list:
{
organizations(filter: {ibOrgTypes_All: [ADVERTISING_PARTNER, CONTENT_PROVIDER]}) {
id
name
}
}
Post Filter Feed
The main fields to look for on posts:
Main Fields:
id - unique id
title - the post title
summary - a short text about the post
best_summary - AI Summary by default, Summary as backup (use on feeds)
url - The link to read the article in full
postImages - Images uploaded to the article
insertedAt - Date it was added to Infabode DB
updatedAt - The date the post was edited
publishedAt - Date that the post was published (use for ordering)
contentType - Post content type
indSectors - List of industry sector objects
locations - List of location objects
source - Company that posted the article
tags - List of keywords from the post
ai_summary - AI Summary for post
distanceCity - The distance from a city
distancePoint - The distance from a geo location
searchRank - Search match relevance score (appears in search)
searchSnippet - Summary text of matching search query (appears in search)
sentimentScore - The sentiment of the post
mentions - List of companies, mentioned in this post
Flags:
isExternal - Is the post on an external website
isOnHold - Posts that are under review
isPaid - Payment required to read
isPublic - Post available to the general public without login
isStarred - A post that was trending, with a high number of views for that sector/location
isSubscriptionRequired - Is a subscription required to read the article in full
Property Transactions & Listing Specific Fields
buyers - Companies buying the asset
buyingAgents - The buyer's agent for the asset
sellers - The seller of the asset
sellingAgents - The seller's agent for the asset
builtAt - The year the building was built
addressLabel - Building address
capRate - The caprate of the building
contactEmail - Contact email
contactName - Name of the contact person(s)
currency - Currency
leaseLength - How long is the lease for
ListingStatus - The current status of the listing
noi - Net operating income
pps - Price per square foot
price - Total price
sizeRangeH - The top end of the building size range
sizeRangeL - The lower end of the building size range
sizeTotal - The total size of the building
Job Specific Fields
jobRecruiter - Who is posting the job
jobSectors - Which sector is the job in
jobStatus - What is the current job post status
jobType - The length and frequency of the job opening
salaryMax - Maximum salary
salaryMin - Minimum salary
isCommissionAvailable - Is there commission available for the job role
isSalaryVisible - Permission from the company to display the salary
Example Query
{
post(id: 253663) {
id
title
summary
insertedAt
contentType { name }
indSectors { name path }
source { name logoS3 }
locations { name path geometry }
tags
}
}
—[response]—
{
"data": {
"post": {
"title": "Axa IMRA's 22 Bishopsgate 'vertical village' completed",
"tags": [
"AxaIMRA",
"PreLet",
"Completion"
],
"summary": "[Photo: Jeremy Felson]London's 22 Bishopsgate has reached practical completion. Described as \"Europe's first vertical village\" by its owner, Axa Investment Managers – Real Assets, the 1.275 million sq ft (118,451 sq m) building is appro",
"source": {
"name": "Real Asset Media",
"logoS3": "https://infabode-avatars.s3.eu-west-2.amazonaws.com/profile_avatars/93194/0 (8).jpeg"
},
"locations": [
{
"path": "London, Greater London, ENG, United Kingdom",
"name": "London",
"geometry": {
"type": "Point",
"coordinates": [
-0.0830852,
51.5144513
]
}
}
],
"insertedAt": "2020-12-11T20:50:15Z",
"indSectors": [
{
"path": "Office",
"name": "Office"
}
],
"id": 253663,
"contentType": {
"name": "Market News"
}
}
}
}
Post Authorization
In order to obtain instant full content access without the user filling this information in, each post must be authorized through the authPost mutation. The call requires the post id as well as the viewer details, with the firstName and lastName being the only compulsory fields.
mutation {
authPost(
id: 123105
viewer: {
firstName: "Homer"
lastName: "Simpson"
company: "Springfield Nuclear Power Plant"
jobTitle: "Nuclear Safety Inspector"
}
) {
span
token
url
}
}
Posts - Standard Filters
When you are searching the database broadly without filtering by location. These results will show the NEWER results first.
1. Search by Industry Sectors
Search for "Flexible Offices"
{
posts(
limit: 3
filter: { indSectorsIds: [1011] }
)
{
id
title
locations { path }
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Exeter Site Forms Part Of Castleforge Expansion",
"locations": [
{ "path": "Leeds, Leeds, ENG, United Kingdom" },
{ "path": "Manchester, Manchester, ENG, United Kingdom" }
],
"id": 243467
},
{
"title": "Castleforge Sets Out Leeds Plans",
"locations": [
{ "path": "Leeds, Leeds, ENG, United Kingdom" }
],
"id": 243466
},
{
"title": "Approval for major regeneration of Aldershot",
"locations": [
{ "path": "Aldershot, Hampshire, ENG, United Kingdom" }
],
"id": 243469
}
]
}
}
2. Search by Title
{
posts(limit: 3, filter: { title: "gherkin" }) {
id
title
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "£22B Of London Real Estate Is Owned Offshore, Including Battersea Power Station And The Gherkin",
"id": 57756
},
{
"title": "Merlin buys Barcelona's 'Gherkin' skyscraper for €142m",
"id": 41733
},
{
"title": "Ex-IVG board members acquitted over Gherkin deal",
"id": 33967
}
]
}
}
3. Search by Content
{
posts(limit: 3, filter: { search: "coronavirus" }) {
id
title
searchRank
searchSnippet
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "VLOG: Coronavirus (COVID-19): The Coronavirus Job Retention Scheme",
"searchSnippet": "Last week, the Chancellor announced the <b>Coronavirus</b> Job Retention Scheme, just one of the measures being put into place by Government as part of a business support package to cope with the global COVID ... direct from HMRC shortly, but in the meantime",
"searchRank": 0.7993903756141663
},
{
"title": "VLOG: Coronavirus (COVID-19): OxLEP digital Q&A: 'What impact will the Coronavirus pandemic have on our rural economy and communities?'",
"searchSnippet": "focus on rural issues brought about by the pandemic and ask the question: 'What impact will the <b>Coronavirus</b> pandemic have on our rural economy?'.
Our panel, chaired by former radio",
"searchRank": 0.7945268750190735
},
{
"title": "WRAPUP - Economic impact of coronavirus outbreak in SEE by March 18",
"searchSnippet": "SeeNews) - Automobile plants suspended production, airports closed down and privatisation plans were put on hold as the <b>coronavirus</b> pandemic spread across Southeast Europe (SEE).",
"searchRank": 0.7131088376045227
}
]
}
}
4. Search by Tag
{
posts(limit: 3, filter: { tags: ["covid", "health"] }) { id title }
}
—[response]—
{
"data": {
"posts": [
{
"title": "Health risk monitors repurposed for site social distancing",
"id": 189095
},
{
"title": "What's Trending in Health-Care Design?",
"id": 187109
},
{
"title": "CA Ventures Launches Health-Care Platform, Talks MOB Investment",
"id": 184579
}
]
}
}
5. OR filters (orTags)
posted by Savills OR tagged as savills
{
posts(filter: { sourcesIds: [50428], orTags: ["savills"] }) {
title
source { name }
tags
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Savills unveils catalogue for June auction",
"tags": [
"savills",
"auction"
],
"source": { "name": "IB External" }
},
{
"title": "Savills: Yokohama (June, 2020)",
"tags": [
"yokohama",
"savills",
"japan"
],
"source": { "name": "Savills PLC" }
}
]
}
}
6. isStarred filter
Starred is content that was trending from user activity
{
posts(filter: {isStarred: true}) {
id
isStarred
}
}
—[response]—
{
"data": {
"posts": [
{
"id": 1,
"isStarred": true
}
]
}
}
7. publishedAtTime (DateTime range)
{
posts(filter: {publishedAtTime: {min: "2024-11-01 00:00:01Z", max: "2024-11-10 23:59:00Z"}}) {
id
publishedAt
}
}
—[response]—
{
"data": {
"posts": [
{
"id": 1131348,
"publishedAt": "2024-11-08T22:36:02Z"
}
]
}
}
8. Filter by Post IDs
{
posts(filter: { ids: [253663, 243467, 243466] }) {
id
title
}
}
—[response]—
{
"data": {
"posts": [
{
"id": 253663,
"title": "Axa IMRA's 22 Bishopsgate 'vertical village' completed"
},
{
"id": 243467,
"title": "Exeter Site Forms Part Of Castleforge Expansion"
}
]
}
}
9. Exclude Post IDs
{
posts(filter: { excludeIds: [253663, 243467] }, limit: 5) {
id
title
}
}
10. Filter by Content Types
{
posts(filter: { contentTypesIds: [1, 2, 3] }, limit: 5) {
id
title
contentType { name }
}
}
—[response]—
{
"data": {
"posts": [
{
"id": 253663,
"title": "Axa IMRA's 22 Bishopsgate 'vertical village' completed",
"contentType": { "name": "Research Documents" }
}
]
}
}
11. Filter with Excluded Sources (exclude Posters list)
{
posts(filter: { notSourcesIds: [50428] }, limit: 5) {
id
title
source { name }
}
}
12. Filter by AND Tags (all tags must be present)
{
posts(filter: { andTags: ["covid", "health"] }, limit: 5) {
id
title
tags
}
}
13. Filter by Excluded Tags
{
posts(filter: { notTags: ["covid"] }, limit: 5) {
id
title
tags
}
}
14. Filter by Date Range (start/end)
{
posts(filter: {
start: "2024-01-01T00:00:00Z",
end: "2024-12-31T23:59:59Z"
}, limit: 5) {
id
title
publishedAt
}
}
15. Filter by Published Date Range
{
posts(filter: {
publishedAt: {
min: "2024-01-01",
max: "2024-12-31"
}
}, limit: 5) {
id
title
publishedAt
}
}
16. Filter by Inserted Date Range
{
posts(filter: {
insertedAt: {
min: "2024-01-01",
max: "2024-12-31"
}
}, limit: 5) {
id
title
insertedAt
}
}
17. Filter by Review Status
{
posts(filter: { reviewed: true }, limit: 5) {
id
title
}
}
18. Filter by Public Content
{
posts(filter: { isPublic: true }, limit: 5) {
id
title
isPublic
}
}
19. Filter by External Content
{
posts(filter: { isExternal: true }, limit: 5) {
id
title
isExternal
}
}
20. Filter by Subscription Required
{
posts(filter: { isSubscriptionRequired: true }, limit: 5) {
id
title
isSubscriptionRequired
}
}
21. Filter by Address Label
{
posts(filter: { addressLabel: "Central London" }, limit: 5) {
id
title
addressLabel
}
}
22. Filter by Property Size Range
{
posts(filter: {
propertySize: {
min: 1000,
max: 5000
}
}, limit: 5) {
id
title
propertySize
}
}
23. Filter by Size Total Range
{
posts(filter: {
sizeTotal: {
min: 5000,
max: 10000
}
}, limit: 5) {
id
title
sizeTotal
}
}
24. Filter by Size Total or Property Size
{
posts(filter: {
sizeTotalOrPropertySize: {
sizeTotal: { min: 5000, max: 10000 },
propertySize: { min: 1000, max: 5000 }
}
}, limit: 5) {
id
title
sizeTotal
propertySize
}
}
25. Filter by Land Size Range
{
posts(filter: {
landSize: {
min: 1000,
max: 5000
}
}, limit: 5) {
id
title
landSize
}
}
26. Filter by Contact Name
{
posts(filter: { contactName: "John Smith" }, limit: 5) {
id
title
contactName
}
}
27. Filter by Contact Email
{
posts(filter: { contactEmail: "contact@example.com" }, limit: 5) {
id
title
contactEmail
}
}
28. Filter by Currency
{
posts(filter: { currency: POUND }, limit: 5) {
id
title
currency
price
}
}
29. Filter by Price Range
{
posts(filter: {
price: {
min: 1000000,
max: 10000000,
currency: POUND
}
}, limit: 5) {
id
title
price
currency
}
}
30. Filter by Price Per Square Foot (PPS)
{
posts(filter: {
pps: {
min: 50,
max: 200
}
}, limit: 5) {
id
title
pps
}
}
31. Filter by Cap Rate
{
posts(filter: {
capRate: {
min: 3.0,
max: 7.0
}
}, limit: 5) {
id
title
capRate
}
}
32. Filter by NOI (Net Operating Income)
{
posts(filter: {
noi: {
min: 100000,
max: 1000000
}
}, limit: 5) {
id
title
noi
}
}
33. Filter by Built At Date Range
{
posts(filter: {
builtAt: {
min: "2010-01-01",
max: "2020-12-31"
}
}, limit: 5) {
id
title
builtAt
}
}
34. Filter by Sentiment Score
{
posts(filter: { sentimentScore: POSITIVE }, limit: 5) {
id
title
sentimentScore
}
}
35. Filter by Listing Status
{
posts(filter: { listingStatus: [AVAILABLE, UNDER_OFFER] }, limit: 5) {
id
title
listingStatus
}
}
36. Filter by Job Types
{
posts(filter: { jobTypes: ["FULL_TIME", "PART_TIME"] }, limit: 5) {
id
title
jobType
}
}
37. Filter by Working Location Types
{
posts(filter: { workingLocationTypes: [REMOTE, HYBRID] }, limit: 5) {
id
title
workingLocationTypes
}
}
38. Filter by Job Sectors
{
posts(filter: { jobSectors: [1, 2] }, limit: 5) {
id
title
jobSectors { name }
}
}
39. Filter by Job Sectors IDs
{
posts(filter: { jobSectorsIds: [1, 2] }, limit: 5) {
id
title
jobSectors { name }
}
}
40. Filter by Job Recruiters
{
posts(filter: { jobRecruiters: ["Savills", "CBRE"] }, limit: 5) {
id
title
jobRecruiter
}
}
41. Filter by Job Status
{
posts(filter: { jobStatus: [ACTIVE, CLOSED] }, limit: 5) {
id
title
jobStatus
}
}
42. Filter by Salary Range
{
posts(filter: {
salary: {
min: 50000,
max: 100000
}
}, limit: 5) {
id
title
salaryMin
salaryMax
}
}
43. Filter by Mentions IDs
{
posts(filter: { mentionsIds: [50428, 79439] }, limit: 5) {
id
title
mentions { name }
}
}
44. Filter by Mentions Source ID
{
posts(filter: { mentionsSourceId: 50428 }, limit: 5) {
id
title
mentions { name }
}
}
45. Filter with Excluded Mentions Source IDs
{
posts(filter: { notMentionsSourceIds: [50428] }, limit: 5) {
id
title
mentions { name }
}
}
46. Filter by Sellers IDs
{
posts(filter: { sellersIds: [50428] }, limit: 5) {
id
title
sellers { org { name } }
}
}
47. Filter by Selling Agents IDs
{
posts(filter: { sellingAgentsIds: [50428] }, limit: 5) {
id
title
sellingAgents { org { name } }
}
}
48. Filter by Buyers IDs
{
posts(filter: { buyersIds: [50428] }, limit: 5) {
id
title
buyers { org { name } }
}
}
49. Filter by Buying Agents IDs
{
posts(filter: { buyingAgentsIds: [50428] }, limit: 5) {
id
title
buyingAgents { org { name } }
}
}
Posts - Location Filters
When you filter by location_id, against one (or a set) of our 148,000 available locations, click here to see the full list, the zoom option allows you to extend the search hierarchically across the location levels (continent, country, city...).
Zoom Options:
ZOOM = OFF: just content at the exact location level
ZOOM = IN: (default) content at the location level and then any content within it
ZOOM = OUT: content at location level and then upwards hierarchy until reaching continent level
Sorting Options:
NEWER: (default) the newest content first
TREE_UP: going up the location address hierarchy
TREE_DOWN: going down the location address hierarchy
1. Location by ID with Zoom OFF
{
posts(
filter: {
title: "mixed-use project"
locations_ids: [121610] ## Los Angeles
zoom: OFF
}
)
{
title
insertedAt
locationPath
locationType
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Proposed $1B Hollywood Center Mixed-Use Project to Include Affordable Seniors Housing",
"locationType": "CITY",
"locationPath": "Los Angeles, CA, United States",
"insertedAt": "2020-10-06T06:43:18Z"
},
{
"title": "Related Cos. JV Breaks Ground on $1B LA Mixed-Use Project",
"locationType": "CITY",
"locationPath": "Los Angeles, CA, United States",
"insertedAt": "2019-02-13T15:37:23Z"
}
]
}
}
2. Location by ID with Zoom IN
{
posts(
filter: {
title: "mixed-use project"
locations_ids: [121610] ## Los Angeles
zoom: IN
}
)
{
title
insertedAt
locationPath
locationType
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Proposed $1B Hollywood Center Mixed-Use Project to Include Affordable Seniors Housing",
"locationType": "CITY",
"locationPath": "Los Angeles, CA, United States",
"insertedAt": "2020-10-06T06:43:18Z"
},
{
"title": "Related Cos. JV Breaks Ground on $1B LA Mixed-Use Project",
"locationType": "CITY",
"locationPath": "Los Angeles, CA, United States",
"insertedAt": "2019-02-13T15:37:23Z"
}
]
}
}
3. Location by ID with Zoom OUT
{
posts(
filter: {
title: "mixed-use project"
locations_ids: [121610] ## Los Angeles
zoom: OUT
}
)
{
title
insertedAt
locationPath
locationType
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Proposed $1B Hollywood Center Mixed-Use Project to Include Affordable Seniors Housing",
"locationType": "CITY",
"locationPath": "Los Angeles, CA, United States",
"insertedAt": "2020-10-06T06:43:18Z"
},
{
"title": "Related Cos. JV Breaks Ground on $1B LA Mixed-Use Project",
"locationType": "CITY",
"locationPath": "Los Angeles, CA, United States",
"insertedAt": "2019-02-13T15:37:23Z"
}
]
}
}
Posts - GeoLocation Filters
When you filter by one (or a set of) geographical coordinates and a radius, where:
→
coordinates are expressed as [ [ LONGITUDE, LATITUDE ], [LONGITUDE, LATITUDE] ]. Ex: [ [-0.082984 , 51.5147507], [-0.0775452, 51.5054597] ] (respectively the Gherkin and Tower Bridge)
→
radius is expressed as an integer in meters. Ex: 100 (100 meters)
Fallback Options:
FALLBACK = OFF: returns content from within your radius
FALLBACK = TREE: returns content within the radius, then content from the nearest city/state, country and continent
FALLBACK = EXPAND: (default) will increase the size of your original radius until it reaches a maximum of 100 results from nearby locations
Sorting Options:
NEWER: the newest content first
CLOSER: content nearest your co-ordinates
TREE_UP: going up the location address hierarchy
TREE_DOWN: going down the location address hierarchy
Note: TREE_UP and TREE_DOWN are only available on FALLBACK = TREE. If you don't pass a radius then the default setting is 5,000 meters. If you don't pass a fallback setting then FALLBACK = EXPAND is the default option and for that setting NEWER will be the default sorting order.
1. Geolocation with Fallback OFF
{
posts(
filter: {
coordinates: [[11.5812582, 48.1298707]] ## Deutsche Museum, MUNICH
radius: 900
fallback: OFF
}
)
{
title
insertedAt
locationPath
locationType
distancePoint
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "ATP acquires 4-star hotel in Munich",
"locationType": "POINT",
"locationPath": "Munich, BY, Germany",
"insertedAt": "2017-10-20T08:46:37Z",
"distancePoint": 620
},
{
"title": "Mandarin Oriental, Munich reopens after ambitious revamp",
"locationType": "POINT",
"locationPath": "Munich, BY, Germany",
"insertedAt": "2020-10-26T14:11:22Z",
"distancePoint": 853
}
]
}
}
2. Geolocation with Fallback TREE
{
posts(
filter: {
title: "reopen"
coordinates: [[11.5812582, 48.1298707]] ## Deutsche Museum, MUNICH
radius: 900
fallback: TREE
}
)
{
title
insertedAt
locationPath
locationType
distancePoint
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Mandarin Oriental, Munich reopens after ambitious revamp",
"locationType": "POINT",
"locationPath": "Munich, BY, Germany",
"insertedAt": "2020-10-26T14:11:22Z",
"distancePoint": 853
},
{
"title": "DesignCity Hotels brand debuts with reopening of Maison Schiller in Munich",
"locationType": "CITY",
"locationPath": "Munich, BY, Germany",
"insertedAt": "2019-06-14T11:03:18Z",
"distancePoint": null
}
]
}
}
3. Geolocation with Fallback EXPAND
{
posts(
filter: {
title: "bavaria"
coordinates: [[11.5812582, 48.1298707]] ## Deutsche Museum, MUNICH
fallback: EXPAND
}
)
{
title
insertedAt
locationPath
locationType
distancePoint
distanceCity
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Just in time for Oktoberfest: NH Collection München Bavaria launches",
"locationType": "POINT",
"locationPath": "Munich, BY, Germany",
"insertedAt": "2019-07-17T10:54:31Z",
"distancePoint": 2038,
"distanceCity": 944
},
{
"title": "FREO and 25hours Hotels celebrate the opening of the \"Royal Bavarian\" on Bahnhofplatz in Munich",
"locationType": "CITY",
"locationPath": "Munich, BY, Germany",
"insertedAt": "2017-11-10T10:16:46Z",
"distancePoint": null,
"distanceCity": 944
},
{
"title": "Symbolic laying of the foundation stone for the Bavaria Towers in Munich",
"locationType": "POINT",
"locationPath": "Bogenhausen, BY, Germany",
"insertedAt": "2017-07-04T12:50:10Z",
"distancePoint": 3266,
"distanceCity": 3577
}
]
}
}
4. Posts from multiple geographic coordinates (Luton, Brighton, Munich)
{
posts(
filter: {
radius: 1000
coordinates: [
[-0.41748, 51.87967]
[11.57549, 48.13743]
[-0.13947, 50.82838]
]
}
) {
title
locations { path }
}
}
—[response]—
{
"data": {
"posts": [
{
"title": "Superdry signs for The Mall Luton",
"locations": [
{ "path": "Luton, Luton, ENG, United Kingdom" }
]
},
{
"title": "Schroder Dispose of £36.1 Million Victory House in Brighton City Centre",
"locations": [
{ "path": "Brighton, Brighton and Hove, ENG, United Kingdom" }
]
}
]
}
}
Options and Default Settings
Posts - Queries & Examples
General
1. Obtaining status
{
status {
apiVersion
apiCoverage{
locations
industrySectors
}
}
}
—[response]—
{
"data": {
"status": {
"apiVersion": "2.0.0",
"apiCoverage": {
"locations": [ "Global" ],
"industrySectors": [ "All" ]
}
}
}
}
2. Listing Content Types
{
contentTypes { name }
}
—[response]—
{
"data": {
"contentTypes": [
{ "name": "Research Documents" },
{ "name": "Industry Insights" }
]
}
}
3. Listing Industry Sectors/Subsectors
{
indSectors {
id
name
subsectors { id name }
}
}
—[response]—
{
"data": {
"indSectors": [
{ "subsectors": [], "name": "General Market", "id": 18 },
{
"subsectors": [
{ "name": "Flexible Offices", "id": 1011 },
{ "name": "Business Parks", "id": 1012 }
],
"name": "Office",
"id": 1
}
]
}
}
4. Searching for Locations
{
locations(filter: { name: "munich" }) {
id
name
path
}
}
—[response]—
{
"data": {
"locations": [
{ "path": "Munich, BY, Germany", "name": "Munich", "id": 35343 },
{ "path": "Munich, ND, United States", "name": "Munich", "id": 133892 },
{ "path": "New Munich, MN, United States", "name": "New Munich", "id": 131181 }
]
}
}
5. Limiting results: latest 5 posts
{
posts(limit: 5) { title }
}
—[response]—
{
"data": {
"posts": [
{
"title": "Accor and sbe to debut Hyde Living aparthotel brand in Europe"
},
{
"title": "Allianz snaps up Munich office for €214m"
}
]
}
}
6. Sorting results: newer posts
{
posts(order: NEWER, limit: 3) { id insertedAt title }
}
—[response]—
{
"data": {
"posts": [
{
"title": "NitNeil Partners Acquires Self-Storage Facility in Metro Denver",
"insertedAt": "2020-11-20T10:17:28Z"
},
{
"title": "Dinerstein Tops Out 33-Story Aspire Post Oak Apartment Tower in Houston",
"insertedAt": "2020-11-20T10:15:54Z"
}
]
}
}
7. Authorizing a Post
post(id: 123105) {
title
summary
url
}
—[response]—
{
"data": {
"post": {
"url": "https://infabode.com/post/123105",
"title": "Infabode Collaborates with Moody's Analytics",
"summary": " Infabode is pleased to announce a new integration with the Moody's Analytics REIS Network, a commercial real estate (CRE) search platform. The collaboration will see Infabode data being displayed through the Network's search function."
}
}
}
mutation {
authPost(
id: 123105
viewer: {
firstName: "Homer"
lastName: "Simpson"
company: "Springfield Nuclear Power Plant"
jobTitle: "Nuclear Safety Inspector"
}
) {
span
token
url
}
}
—[response]—
{
"data": {
"authPost": {
"url": "https://infabode.com/post/123105?token=RSX5UDITEEPGSUGRUVMV",
"token": "RSX5UDITEEPGSUGRUVMV",
"span": 60
}
}
}
Data Extraction - Research
The Data Extraction Research API provides access to structured data points extracted from posts. These data points represent quantitative information such as rental rates, yields, prices, and other market metrics.
Data Extraction Research Object
The main fields available on dataExtractionResearch:
Field Type Description
id Integer Unique identifier
insertedAt DateTime Creation timestamp
updatedAt DateTime Last update timestamp
dataPointValue Decimal The numeric value of the data point
dataPointClassifications [DataPointClassification] Classification of the data point (HISTORIC, FORECASTED)
rangeStart DateTime Start of the time range for the data point
rangeEnd DateTime End of the time range for the data point
aiSnippet String AI-generated snippet from the source post containing the data point
addressLabel String Address or location label associated with the data point
verificationScore Integer Data quality score (1-5): 5 = Human verified, 4 = No issues (default), 3 = Flagged by one user, 2 = Flagged by multiple users, 1 = Needs admin review
dataPointType DataPointType Type of data point (e.g., "Asking Rent", "Yield", etc.)
dataPointUnit DataPointUnit Unit of measurement (e.g., "sq ft", "years", "GBP", etc.)
org Organization Company associated with the data point
location Location Geographic location
indSectors [IndustrySector] Industry sectors associated with the data point
Data Point Classification Enum
Value Description
HISTORIC Historical data point
FORECASTED Forecasted or projected data point
Note: Infabode provides data scores of 1-4. The API automatically filters out records with verification scores of 1 or 2, and records with reported data point errors, ensuring the data is of highest quality as possible.
Nested Structures
DataPointType
Field Type Description
id Integer Unique identifier
dataPointTypeName String Name of the data point type (e.g., "Asking Rent")
Available Data Point Types:
Id Name
1 Take Up
2 Properties Under Offer
3 Properties Under Construction
4 New Supply
5 Availability Rate
6 Vacancy Rate
7 Investment Amount
8 Rents
9 Net Absorption
10 Total Inventory
11 Days on Market
12 Yields
13 Pricing
DataPointUnit
Field Type Description
id Integer Unique identifier
dataPointUnitName String Name of the unit (e.g., "sq ft", "GBP", "years")
Available Data Point Units:
Id Name
1 USD
2 EUR
3 GBP
5 SF
6 PERCENT
7 DAYS
8 UNITS
Filter Options
The dataExtractionResearchFilter supports the following filters:
Field Type Description
ids [Integer] Filter by research IDs
postIds [Integer] Filter by post IDs
orgIds [Integer] Filter by organization IDs
indSectorsIds [Integer] Filter by industry sector IDs
publishedAt DateRange Filter by published date range
locationsIds [Integer] Filter by location IDs
dataPointTypeIds [Integer] Filter by data point type IDs
dataPointUnitIds [Integer] Filter by data point unit IDs
dataPointClassifications [DataPointClassification] Filter by classifications (HISTORIC, FORECASTED)
Queries & Examples
1. Get a single data extraction research by ID
{
dataExtractionResearch(id: 12345) {
id
dataPointValue
verificationScore
dataPointType {
id
dataPointTypeName
}
dataPointUnit {
id
dataPointUnitName
}
org {
id
name
}
location {
id
name
path
}
indSectors {
id
name
}
aiSnippet
addressLabel
rangeStart
rangeEnd
dataPointClassifications
}
}
—[response]—
{
"data": {
"dataExtractionResearch": {
"id": 12345,
"dataPointValue": 45.50,
"verificationScore": 4,
"dataPointType": {
"id": 1,
"dataPointTypeName": "Asking Rent"
},
"dataPointUnit": {
"id": 5,
"dataPointUnitName": "GBP"
},
"org": {
"id": 50428,
"name": "Savills PLC"
},
"location": {
"id": 35343,
"name": "London",
"path": "London, Greater London, ENG, United Kingdom"
},
"indSectors": [
{
"id": 1,
"name": "Office"
}
],
"aiSnippet": "The asking rent for office space in Central London has reached £45.50 per sq ft.",
"addressLabel": "Central London",
"rangeStart": "2024-01-01T00:00:00Z",
"rangeEnd": "2024-03-31T23:59:59Z",
"dataPointClassifications": ["HISTORIC"]
}
}
}
2. List data extraction researches with filters
{
dataExtractionResearches(
limit: 10
offset: 0
filter: {
dataPointTypeIds: [1, 2]
locationsIds: [241]
dataPointClassifications: [HISTORIC]
}
) {
id
dataPointValue
dataPointType {
dataPointTypeName
}
location {
name
path
}
org {
name
}
}
}
—[response]—
{
"data": {
"dataExtractionResearches": [
{
"id": 12345,
"dataPointValue": 45.50,
"dataPointType": {
"dataPointTypeName": "Asking Rent"
},
"location": {
"name": "London",
"path": "London, Greater London, ENG, United Kingdom"
},
"org": {
"name": "Savills PLC"
}
},
{
"id": 12346,
"dataPointValue": 3.2,
"dataPointType": {
"dataPointTypeName": "Yield"
},
"location": {
"name": "London",
"path": "London, Greater London, ENG, United Kingdom"
},
"org": {
"name": "CBRE"
}
}
]
}
}
3. Filter by organization and date range
{
dataExtractionResearches(
limit: 20
filter: {
orgIds: [50428]
publishedAt: {
min: "2024-01-01T00:00:00Z"
max: "2024-12-31T23:59:59Z"
}
}
) {
id
dataPointValue
dataPointType {
dataPointTypeName
}
dataPointUnit {
dataPointUnitName
}
verificationScore
insertedAt
}
}
—[response]—
{
"data": {
"dataExtractionResearches": [
// Array of research results matching the filters
]
}
}
4. Filter by industry sectors and data point classifications
{
dataExtractionResearches(
filter: {
indSectorsIds: [1, 2]
dataPointClassifications: [HISTORIC, FORECASTED]
}
) {
id
dataPointValue
dataPointClassifications
indSectors {
name
}
}
}
—[response]—
{
"data": {
"dataExtractionResearches": [
// Array of research results matching the filters
]
}
}
Data Extraction - Transactions
The Data Extraction Transaction API provides access to structured transaction data extracted from posts. These transactions represent real estate deals including sales, leases, and other property-related transactions with detailed financial and property information.
Data Extraction Transaction Object
The main fields available on dataExtractionTransaction:
Field Type Description
id Integer Unique identifier
insertedAt DateTime Creation timestamp
updatedAt DateTime Last update timestamp
dataPointClassifications [DataPointClassification] Classification of the transaction (HISTORIC, FORECASTED)
buildingSize Decimal Building size in square feet
landSize Decimal Land size in square feet
yearBuilt Date Year the building was constructed
currency CurrencyType Currency used for financial values (USD, EUR, GBP)
price Decimal Transaction price
pps Decimal Price per square foot (PPS)
ppsBasis String PPS calculation basis
noi Decimal Net Operating Income (NOI)
leaseLength Decimal Lease length (in years or months)
leaseStart Date Lease start date
leaseEnd Date Lease end date
capRate Decimal Capitalization rate (cap rate)
yearRenovated Date Year the building was renovated
transactionDate Date Date of the transaction
transactionDealStatus String Transaction deal status
transactionTenureType String Transaction tenure type
transactionScope String Transaction scope
tags [String] Tags associated with the transaction
aiSnippet String AI-generated snippet from the source post containing transaction details
addressLabel String Address or location label associated with the transaction
debtAmount Decimal Debt amount
ltv Decimal Loan-to-value (LTV) ratio
debtMaturityDate Date Debt maturity date
rentFreePeriod Decimal Rent free period in months
otherRentInformation String Other rent information
pricePerAcre Decimal Price per acre
pricePerUnit Decimal Price per unit
debtFinancingType String Type of debt financing
buildStatus String Build status of the property
publishedAt DateTime Date when the transaction was published
verificationScore Integer Data quality score (1-5): 5 = Human verified, 4 = No issues (default), 3 = Flagged by one user, 2 = Flagged by multiple users, 1 = Needs admin review
transactionDataType TransactionDataType Type of transaction (Lease, Sale, Other)
location Location Geographic location
indSectors [IndustrySector] Industry sectors associated with the transaction
transactionOrgs [DataExtractionTransactionOrg] Organizations involved in the transaction with their roles (buyer, seller, agents, etc.)
transactionGroup DataExtractionTransactionGroup Transaction group (if part of a group)
Note: The API automatically filters out records with transaction errors, ensuring only high-quality data is returned.
Nested Structures
TransactionDataType
Field Type Description
id Integer Unique identifier
transactionDataTypeName String Name of the transaction type
Available Transaction Data Types:
Id Name
1 Lease Transaction
2 Sale Transaction
3 Other transaction
DataExtractionTransactionOrg
Field Type Description
id Integer Unique identifier
insertedAt DateTime Creation timestamp
updatedAt DateTime Last update timestamp
transactionEntityType TransactionEntityTypeType Role of the organization in the transaction
org Organization Organization details
Transaction Entity Types:
Value Description
BUYER Buyer in the transaction
SELLER Seller in the transaction
BUYING_AGENT Buying agent for the transaction
SELLING_AGENT Selling agent for the transaction
TENANT Tenant in a lease transaction
DEBT_PROVIDERS Debt providers for the transaction
DataExtractionTransactionGroup
Field Type Description
transactionGroupId Integer Unique transaction group identifier
startedAt Date Group start date (first transaction's transaction_date)
dataExtractionTransactions [DataExtractionTransaction] Related transactions in the group (ordered by transaction_date DESC)
Filter Options
The dataExtractionTransactionFilter supports the following filters:
Field Type Description
ids [Integer] Filter by transaction IDs
transactionDataTypeIds [Integer] Filter by transaction data type IDs
indSectorIds [Integer] Filter by industry sector IDs
locationIds [Integer] Filter by location IDs
priceRange PriceRange Filter by price range with currency conversion
transactionDateRange DateRange Filter by transaction date range
orgIds [Integer] Filter by organization IDs (companies mentioned)
addressLabelContains String Filter by address label containing text
PriceRange object:
min: Minimum price (optional)
max: Maximum price (optional)
currency: Currency for the range (pound, dollar, euro)
DateRange object:
min: Start date (optional)
max: End date (optional)
The dataExtractionTransactionGroupFilter supports:
Field Type Description
transactionGroupId Integer Filter by transaction group ID
Queries & Examples
1. Get a single data extraction transaction by ID
{
dataExtractionTransaction(id: 12345) {
id
price
currency
transactionDate
verificationScore
transactionDataType {
id
transactionDataTypeName
}
location {
id
name
path
}
transactionOrgs {
transactionEntityType
org {
id
name
}
}
indSectors {
id
name
}
buildingSize
landSize
yearBuilt
aiSnippet
addressLabel
}
}
—[response]—
{
"data": {
"dataExtractionTransaction": {
"id": 12345,
"price": 5000000.00,
"currency": "GBP",
"transactionDate": "2024-03-15",
"verificationScore": 4,
"transactionDataType": {
"id": 2,
"transactionDataTypeName": "Sale Transaction"
},
"location": {
"id": 35343,
"name": "London",
"path": "London, Greater London, ENG, United Kingdom"
},
"transactionOrgs": [
{
"transactionEntityType": "BUYER",
"org": {
"id": 50428,
"name": "Savills PLC"
}
},
{
"transactionEntityType": "SELLER",
"org": {
"id": 79439,
"name": "CBRE"
}
}
],
"indSectors": [
{
"id": 1,
"name": "Office"
}
],
"buildingSize": 5000.00,
"landSize": 2000.00,
"yearBuilt": "2010-01-01",
"aiSnippet": "Savills PLC acquired a 5,000 sqm office building in Central London for £5M.",
"addressLabel": "Central London"
}
}
}
2. List data extraction transactions with filters
{
dataExtractionTransactions(
limit: 10
offset: 0
filter: {
transactionDataTypeIds: [1, 2]
locationIds: [35343]
priceRange: {
min: 1000000
max: 10000000
currency: pound
}
}
) {
id
price
currency
transactionDate
transactionDataType {
transactionDataTypeName
}
location {
name
path
}
}
}
—[response]—
{
"data": {
"dataExtractionTransactions": [
{
"id": 12345,
"price": 5000000.00,
"currency": "GBP",
"transactionDate": "2024-03-15",
"transactionDataType": {
"transactionDataTypeName": "Sale Transaction"
},
"location": {
"name": "London",
"path": "London, Greater London, ENG, United Kingdom"
}
},
{
"id": 12346,
"price": 2500000.00,
"currency": "GBP",
"transactionDate": "2024-02-20",
"transactionDataType": {
"transactionDataTypeName": "Lease Transaction"
},
"location": {
"name": "London",
"path": "London, Greater London, ENG, United Kingdom"
}
}
]
}
}
3. Filter by organization and transaction date range
{
dataExtractionTransactions(
limit: 20
filter: {
orgIds: [50428]
transactionDateRange: {
min: "2024-01-01"
max: "2024-12-31"
}
}
) {
id
price
transactionDate
transactionOrgs {
transactionEntityType
org {
name
}
}
}
}
—[response]—
{
"data": {
"dataExtractionTransactions": [
// Array of transaction results matching the filters
]
}
}
4. Get transaction groups with nested transactions
{
dataExtractionTransactionGroups(
limit: 10
filter: {
transactionGroupId: 100
}
transactionFilter: {
transactionDataTypeIds: [2]
}
) {
transactionGroupId
startedAt
dataExtractionTransactions {
id
price
transactionDate
transactionDataType {
transactionDataTypeName
}
}
}
}
—[response]—
{
"data": {
"dataExtractionTransactionGroups": [
{
"transactionGroupId": 100,
"startedAt": "2024-03-15",
"dataExtractionTransactions": [
{
"id": 12345,
"price": 5000000.00,
"transactionDate": "2024-03-15",
"transactionDataType": {
"transactionDataTypeName": "Sale Transaction"
}
},
{
"id": 12347,
"price": 3000000.00,
"transactionDate": "2024-03-10",
"transactionDataType": {
"transactionDataTypeName": "Sale Transaction"
}
}
]
}
]
}
}
5. Filter by address label and industry sectors
{
dataExtractionTransactions(
filter: {
addressLabelContains: "Central London"
indSectorIds: [1, 2]
}
) {
id
addressLabel
price
indSectors {
name
}
}
}
—[response]—
{
"data": {
"dataExtractionTransactions": [
// Array of transaction results matching the filters
]
}
}
AI Generated Content - Posts Extended
Returns a list of posts, number of posts and AI Generated Summaries.
prompt: to be chosen by the API partner e.g. "Up to 200 words. The user is an investor, write as if you are an analysis providing them with a daily update of market activity."
Example
{
postsExtended(limit: 10){
posts { id }
count
summary(prompt: "Take the matching content and generate a summary of market activity")
}
}
—[response]—
{
"data": {
"postsExtended": {
"count": 3,
"posts": [
{ "id": 921812 },
{ "id": 922393 },
{ "id": 922392 }
],
"summary": "In the market, Mahindra Lifespace Developers Ltd achieved success with the sale of India's first Net Zero Waste + Energy residential project..."
}
}
}
AI Generated Content - Smart Posts (posts_smart)
posts_smart runs an AI analysis over one or more datasets of posts (each dataset is defined by a regular post filter + optional limit/order), guided by your prompt. Combing both filters and AI to get the best results.
Input
Field Type Required Description
prompt String! Yes Free-form instruction for the AI. The output JSON structure depends on the prompt (e.g. it might return summary, top_stories, key_trends, etc).
filters [PostsSmartFilter!]! Yes Up to 5 filter blocks.
filters[].filter PostFilter! Yes Same filter object as the regular posts query (locationsIds, indSectorsIds, publishedAt, ids, mentionsIds, search, etc).
filters[].limit Int No Limit per dataset.
filters[].order Order No Order per dataset.
fields [String] No Post fields included into the dataset that is sent for analysis. If omitted, defaults to: ["title","published_at","best_summary","source","tags","mentions","locations","ind_sectors","sentiment_score"]
Notes: Some fields may be removed based on your API user permissions (e.g. content, document_txt).
Output
The return type is JSON and always has the same wrapper keys:
Field Description
result AI output JSON (or null)
warnings Meta about datasets (always present)
timed_out Datasets that hit per-dataset timeout
failed Datasets that failed to prepare
skipped_due_to_content Datasets skipped to stay within context length limits
error String or null
Important: Errors are returned inside the payload (error), not as GraphQL errors.
Examples
Summarize a specific list of post IDs
{
posts_smart(
filters: [
{
filter: { ids: [1476754, 1476344, 1476305] }
}
]
prompt: "Summarize what these market posts are saying about the london office market"
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"summary": "..."
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Let the filter select posts, then extract structured trends
{
posts_smart(
filters: [
{
filter: {
locationsIds: [242],
indSectorsIds: [4],
publishedAt: { min: "2025-11-30", max: "2025-12-31" },
contentTypesIds: [1]
}
}
]
prompt: "What are the key trends happening in the US residential market?"
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"key_trends": [
{
"trend": "…",
"details": "…"
}
]
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Rank a list of posts (by provided IDs)
{
posts_smart(
filters: [
{
filter: { ids: [1477072, 1477071, 1477061, 1477051, 1477049, 1477045, 1477042, 1477041, 1477040, 1477037] }
}
]
prompt: "Take these posts and rank them in the order of importance for a large real estate investment company"
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"ranked_posts": [
{
"id": 1477061,
"title": "New Developer Enters Dubai's Luxury Real Estate Market with AED 1 Billion Investment Pipeline",
"summary": "..."
},
{
"id": 1477042,
"title": "Dubai Creek's New Residential Masterplan: A Landmark Investment Vision",
"summary": "..."
}
]
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Extract a structured list from a filter-selected dataset (example: office deals + size)
{
posts_smart(
filters: [
{
filter: {
locationsIds: [71714],
indSectorsIds: [1, 1011],
publishedAt: { min: "2025-12-23", max: "2025-12-30" },
contentTypesIds: [8, 9]
}
}
]
prompt: "Rank these transactions in order based on the size of the deal. Return as a list of posts."
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"posts": [
{
"id": 1475962,
"title": "Visa to Move European Headquarters to London's Canary Wharf",
"size": "300,000 sq ft",
"best_summary": "..."
},
{
"id": 1476344,
"title": "Hines buys trophy office in central London from HB Reavis",
"size": "139,000 sq ft",
"best_summary": "..."
}
]
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Compare two datasets (multi-filter prompt)
{
posts_smart(
filters: [
{
filter: {
locationsIds: [71714],
indSectorsIds: [1, 1011],
publishedAt: { min: "2025-09-30", max: "2025-12-30" },
contentTypesIds: [1]
}
},
{
filter: {
locationsIds: [4],
indSectorsIds: [12],
publishedAt: { min: "2025-09-30", max: "2025-12-30" },
contentTypesIds: [1]
}
}
]
prompt: "Compare the performance of the London Office Market with that of the European Logistics market. Give me a text answer but also list relevant posts i should read more on."
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"text": "..."
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Compare company activity (mentions-based datasets)
{
posts_smart(
filters: [
{
filter: {
mentionsIds: [156485, 133356, 150744, 161529, 159864, 199614, 220458, 194466, 162401, 223504, 205206, 236765, 266810, 257131, 260690, 241013, 243629, 65940],
publishedAt: { min: "2025-06-30", max: "2025-12-30" }
}
},
{
filter: {
mentionsIds: [135281, 132289, 132290, 132292, 132293, 132294, 132295, 132296, 133966, 133962, 119361, 161099, 132288, 132297, 156083, 151460, 155264, 155367, 156321, 133960, 133958, 181558, 133967, 159293, 183076, 201778, 216734, 170950, 172293, 175463, 214361, 212356, 216738, 230329, 228778, 252481, 236406, 269877, 239700, 67614, 241703],
publishedAt: { min: "2025-06-30", max: "2025-12-30" }
}
}
]
prompt: "Compare the activity of these companies over the last 6 months."
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"comparative_analysis": {
"companies": [
{
"name": "Blackstone",
"activity_summary": {
"transactions": [
{
"type": "Acquisition",
"details": "..."
}
]
}
},
{
"name": "Nuveen Real Estate",
"activity_summary": {
"transactions": [
{
"type": "Funding",
"details": "..."
}
]
}
}
]
}
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Geolocation comparison (two coordinates)
{
posts_smart(
filters: [
{
filter: {
coordinates: [[-73.9786736, 40.7587402]],
fallback: OFF,
radius: 805
}
},
{
filter: {
coordinates: [[-0.082984, 51.5147507]],
fallback: OFF,
radius: 805
}
}
]
prompt: "What is the major activity happening around these two assets as a summary. And which of these two assets is more likely to have gone up in value based on that activity."
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"summary": "..."
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Company activity summary + suggested further reading (mentions-based)
{
posts_smart(
filters: [
{
filter: {
mentionsIds: [156485, 133356, 150744, 161529, 159864, 199614, 220458, 194466, 162401, 223504, 205206, 236765, 266810, 257131, 260690, 241013, 243629, 65940]
}
}
]
prompt: "Summarize what Nuveen has been doing in the market, focus on European activity. Give me a summary and a list of posts that i should do further reading on."
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"summary": "...",
"further_reading": [
{
"id": 1474155,
"published_at": "2025-12-26T08:37:31Z",
"title": "Hayfin and Capreon acquire iconic London office building 70 St Mary Axe from Nuveen"
},
{
"id": 1470124,
"published_at": "2025-12-22T07:21:26Z",
"title": "Nuveen secures £170m backing for City office overhaul"
}
]
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Transactions list (geofenced dataset) + AI ordering/classification
{
posts_smart(
filters: [
{
filter: {
coordinates: [[-73.9786736, 40.7587402]],
fallback: OFF,
radius: 805,
contentTypesIds: [9]
},
order: NEWER,
limit: 50
}
]
prompt: "Give me a list of transactions, order them based on how likely they are to be major re-developments."
)
}
—[response]—
{
"data": {
"posts_smart": {
"result": {
"transactions": [
{
"published_at": "2025-10-01T09:26:56Z",
"sentiment_score": "positive",
"title": "Vanbarton Closes on 6 East 43rd Street Deal With Conversion on Tap",
"summary": "..."
},
{
"published_at": "2025-10-01T06:23:50Z",
"sentiment_score": "positive",
"title": "Vanbarton seals latest office-to-resi play with Brookfield loan",
"summary": "..."
}
]
},
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": null
}
}
}
Error Response Examples
posts_smart returns errors inside the payload (error) and sets result to null.
A) Context length limit (response is too large)
—[response]—
{
"data": {
"posts_smart": {
"result": null,
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": [
{
"filter": "{publishedAt: {min: \"2025-09-30\", max: \"2025-12-30\"}, contentTypesIds: [1]}",
"reason": "context_length_limit"
}
]
},
"error": "Response is too large"
}
}
}
B) No datasets found (filter(s) matched no posts)
—[response]—
{
"data": {
"posts_smart": {
"result": null,
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": "No datasets found"
}
}
}
AI Generated Content - Data Extraction Research Smart (data_extraction_research_smart)
data_extraction_research_smart runs an AI analysis over one or more datasets of Data Extraction Research records (quantitative datapoints extracted from research data), guided by your prompt.
Input
Field Type Required Description
prompt String! Yes Free-form instruction for the AI. The output JSON structure depends on the prompt.
filters [DataExtractionResearchSmartFilter!]! Yes Up to 5 filter blocks.
filters[].filter DataExtractionResearchSmartFilterFilter! Yes Filter object containing indSectorsIds ([Int]), locationsIds ([Int]), publishedAt (DateRange: { min, max }).
fieldIds [Int] No List of field IDs to include in the analysis. If not provided or empty, all default fields are used. If provided, only fields that exist in the default set are included.
Default field IDs (all 13 fields)
1. Take Up
2. Properties Under Offer
3. Properties Under Construction
4. New Supply
5. Availability Rate
6. Vacancy Rate
7. Investment Amount
8. Rents
9. Net Absorption
10. Total Inventory
11. Days on Market
12. Yields
13. Pricing
Notes
The API automatically filters out low-quality / problematic records:
excludes records with data point errors
excludes user flagged datapoints
If fieldIds contains only invalid IDs (not in the default set), an error is returned
If fieldIds matches the default set exactly, no additional filtering is applied
Output
The return type is JSON and always has the same wrapper keys:
Field Description
result AI output JSON (or null)
warnings Meta about datasets (always present): timed_out, failed, skipped_due_to_content
error String or null
Important: errors are returned inside the payload (error), not as GraphQL errors.
Example (two datasets)
{
dataExtractionResearchSmart(
filters: [
{
filter: {
locationsIds: [71714],
indSectorsIds: [1, 1011],
publishedAt: { min: "2025-10-15", max: "2026-01-15"}
}
},
{
filter: {
locationsIds: [136541],
indSectorsIds: [1, 1011],
publishedAt: { min: "2025-10-15", max: "2026-01-15" }
}
}
],
prompt: "which market is performing best based on the data provided."
)
}
Example (with custom fieldIds)
To analyze only specific fields (e.g., only Vacancy Rate and Investment Amount):
{
dataExtractionResearchSmart(
filters: [
{
filter: {
locationsIds: [71714],
indSectorsIds: [1, 1011],
publishedAt: { min: "2025-10-15", max: "2026-01-15"}
}
}
],
prompt: "analyze market performance",
fieldIds: [6, 7]
)
}
Note: Only field IDs 6 (Vacancy Rate) and 7 (Investment Amount) will be included. Invalid IDs are automatically filtered out.
—[response]—
{
"data": {
"dataExtractionResearchSmart": {
"error": null,
"result": {
"analysis": "London's lower vacancy rate and strong investment volumes in Q3 2025 compared to Manhattan and Midtown Manhattan indicate a better-performing office market.",
"best_market": {
"details": {
"investment_volumes": "£1.6 billion (Q3 2025)",
"office_take_up": "2.7 million SF (Q3 2025)",
"properties_under_construction": "11.7 million SF (Q3 2025)",
"vacancy_rate": "9.0% (Q3 2025)"
},
"location": "London, Greater London, ENG, United Kingdom"
},
"comparison_to_other_markets": [
{
"investment_volumes": null,
"location": "Manhattan, NY, United States",
"office_take_up": "19.47 million SF (full-year 2025)",
"properties_under_construction": null,
"vacancy_rate": "12.7% (Q4 2025)"
},
{
"investment_volumes": null,
"location": "Midtown Manhattan, NY, United States",
"office_take_up": "7.88 million SF (full-year 2025)",
"properties_under_construction": null,
"vacancy_rate": "10.9% (October 2025)"
}
]
},
"warnings": {
"failed": [],
"skipped_due_to_content": [],
"timed_out": []
}
}
}
}
Error response examples
dataExtractionResearchSmart returns errors inside the payload (error) and sets result to null.
A) Context length limit (response is too large)
—[response]—
{
"data": {
"dataExtractionResearchSmart": {
"result": null,
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": [
{
"filter": "{publishedAt: {min: \"2025-09-30\", max: \"2025-12-30\"}}",
"reason": "context_length_limit"
}
]
},
"error": "Response is too large"
}
}
}
B) No datasets found (filter(s) matched no data)
—[response]—
{
"data": {
"dataExtractionResearchSmart": {
"result": null,
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": "No datasets found"
}
}
}
C) Invalid fields set (all fieldIds are invalid)
—[response]—
{
"data": {
"dataExtractionResearchSmart": {
"result": null,
"warnings": {
"timed_out": [],
"failed": [],
"skipped_due_to_content": []
},
"error": "Invalid fields set"
}
}
}
This error occurs when all provided fieldIds are not in the default set of valid field IDs (1-13). If some IDs are valid and some are not, only the valid ones are used.
AI Generated Content - Data Extraction Transaction Smart (data_extraction_transaction_smart)
data_extraction_transaction_smart runs an AI analysis over one or more datasets of Data Extraction Transaction records (real estate transactions including sales, leases, and other property deals), guided by your prompt.
Input
prompt (String!, required)
Free-form instruction for the AI. The output JSON structure depends on the prompt.
filters ([DataExtractionTransactionSmartFilter!]!, required)
Up to 5 filter blocks. Each block:
limit (Int, optional): The limit for items in this dataset
partyTypes ([TransactionEntityTypeType], optional): Which org roles to include in PartiesInvolved for this dataset. Default: all roles. Allowed values: BUYER, SELLER, BUYING_AGENT, SELLING_AGENT, TENANT, DEBT_PROVIDERS
filter (BaseDataExtractionTransactionFilter!, required):
transactionDataTypeIds ( [Int], optional ): Transaction data type IDs (1 = Lease, 2 = Sale, 3 = Other)
indSectorIds ( [Int], optional ): IDs of industry sectors
locationIds ( [Int], optional ): IDs of locations
coordinates ( [[Float]], optional ): List of coordinates [[lon, lat], ...] for geographic filtering
radius (Int, optional): Radius in meters (default: 5000), only with coordinates
fallback (Fallback, optional): Fallback strategy for geographic search (OFF, TREE, EXPAND; default: EXPAND), only with coordinates
priceRange (PriceRange, optional): Price range filter { min, max, currency }
buildingSize (FloatRange, optional): Building size range filter { min, max } (in square meters/feet)
transactionDateRange (DateRange, optional): Transaction date range { min, max }
orgIds ( [Int], optional ): Organization IDs (companies mentioned in transactions)
addressLabelContains (String, optional): Address label contains text (case-insensitive)
dataPointClassifications ( [DataPointClassification], optional ): Data point classifications (Historic, Forecasted)
fieldIds ([Int], optional)
List of field group IDs to include in the analysis. Default: all groups [1, 2, 3, 4, 5, 6]. If provided, only groups that exist in the allowed set are included.
Field Groups:
TransactionSummary (+Meta): type/scope/deal_status/classification/date/address/ind_sectors/tags/location/published_at/ai_snippet/transaction_group
PartiesInvolved: org names grouped by role (buying_agent, debt_providers, selling_agent, seller, buyer, tenant)
DealDetails (Sale): currency/price/pps/pps_basis/price_per_unit/price_per_acre/noi/cap_rate
DealDetails (Lease): lease_start/lease_end/lease_length/rent_free_period/other_rent_information
FinancingDetails: debt_amount/ltv/debt_financing_type/debt_maturity_date
PropertyDetails: building_size/land_size/year_built/year_renovated/transaction_tenure_type/build_status
Notes
The API automatically filters out records with transaction errors (no_transaction_errors: true)
If fieldIds contains only invalid IDs (not in the allowed set 1-6), an error is returned
If partyTypes contains only invalid values (or is an empty list), an error is returned
If fieldIds matches the default set exactly, all groups are included
Output
The return type is JSON and always has the same wrapper keys:
Field Description
result AI output JSON (or null)
warnings Meta about datasets (always present): timed_out, failed, skipped_due_to_content
error String or null
Important: errors are returned inside the payload (error), not as GraphQL errors.
Example (single dataset with location filter)
{
dataExtractionTransactionSmart(
filters: [
{
filter: {
locationIds: [71714],
transactionDataTypeIds: [2],
transactionDateRange: { min: "2024-01-01", max: "2025-12-31" }
}
}
],
prompt: "Analyze the average sale price and price per square meter for office transactions in this location."
)
}
Example (multiple datasets with geographic coordinates)
{
dataExtractionTransactionSmart(
filters: [
{
filter: {
coordinates: [[-0.1276, 51.5074]],
radius: 10000,
fallback: EXPAND,
transactionDataTypeIds: [1],
priceRange: { min: 100000, max: 5000000, currency: POUND }
}
},
{
filter: {
coordinates: [[-74.0060, 40.7128]],
radius: 10000,
fallback: EXPAND,
transactionDataTypeIds: [1],
priceRange: { min: 100000, max: 5000000, currency: DOLLAR }
}
}
],
prompt: "Compare lease transaction trends between London and New York based on price ranges and property details."
)
}
Example (with custom fieldIds)
To analyze only specific field groups (e.g., only TransactionSummary and DealDetails for Sale):
{
dataExtractionTransactionSmart(
filters: [
{
filter: {
locationIds: [71714],
transactionDataTypeIds: [2],
transactionDateRange: { min: "2024-01-01", max: "2025-12-31" }
}
}
],
prompt: "Summarize sale transactions with key details and pricing information.",
fieldIds: [1, 3]
)
}
This will include only:
Group 1: TransactionSummary (+Meta) - basic transaction info, location, dates, etc.
Group 3: DealDetails (Sale) - price, currency, PPS, NOI, cap rate, etc.
Example (filtering by organizations and address)
{
dataExtractionTransactionSmart(
filters: [
{
partyTypes: [BUYER, SELLER],
filter: {
orgIds: [123, 456],
addressLabelContains: "Oxford Street",
transactionDataTypeIds: [2]
}
}
],
prompt: "What are the key characteristics of sale transactions involving these organizations on Oxford Street?"
)
}
Example: Latest 30 transactions in London (PartiesInvolved only)
{
dataExtractionTransactionSmart(
filters: [
{
limit: 30
filter: {
locationIds: [71714]
}
}
]
prompt: "Which companies have been most active in this area?"
fieldIds: [2]
)
}
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"error": null,
"result": {
"active_companies": [
"Acne Studios",
"Darjeeling Express",
"Third Space",
"Simple Health Kitchen",
"Xeinadin Group",
"Flo Health",
"O2 Daisy",
"Langham Hall",
"Industrious",
"Ripple Inc.",
"Ares Management",
"BDP"
]
},
"warnings": {
"failed": [],
"skipped_due_to_content": [],
"timed_out": []
}
}
}
}
Example: US transactions with large building size
{
dataExtractionTransactionSmart(
filters: [
{
limit: 30
filter: {
locationIds: [242]
buildingSize: {
min: 200000
}
}
}
]
prompt: "Summarise who is active in this space."
fieldIds: [1, 2, 3, 4, 5, 6]
)
}
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"error": null,
"result": {
"active_parties": [
{
"activity": "Extended its lease for 486,000 sq ft at 1211 Avenue of the Americas to 2042, effective December 2027.",
"name": "News Corp"
},
{
"activity": "Signed a 10-year lease with a global cloud service provider at its 207,000 sq ft data center.",
"name": "Digital Core REIT"
},
{
"activity": "Co-brokered the sale of Kirkwood Tower in Houston to David Z. Mafrige Interests.",
"name": "JLL"
},
{
"activity": "Acquired Landstown Commons Shopping Center for $102 million.",
"name": "Yale Realty Services Corporation"
},
{
"activity": "Acquired office buildings including a significant purchase at 1401 New York Ave NW.",
"name": "Carr Properties"
},
{
"activity": "Purchased a 465,405 SF industrial building in Philadelphia.",
"name": "Principal Real Estate Investors"
},
{
"activity": "Invested in the construction of a 1M+ sq ft grocery distribution center in Burlington, NC.",
"name": "Blackstone Credit & Insurance"
},
{
"activity": "Acquired a 248,455 sq ft industrial property in Oak Creek.",
"name": "NorthPoint Development"
}
]
},
"warnings": {
"failed": [],
"skipped_due_to_content": [],
"timed_out": []
}
}
}
}
Example: 0.5 mile radius around The Shard (Office-focused)
{
dataExtractionTransactionSmart(
filters: [
{
limit: 30
filter: {
coordinates: [[-0.0865, 51.5045]]
radius: 804
fallback: OFF
indSectorIds: [1, 1011]
}
}
]
prompt: "Summarize and reference any transactions that could materially impact the valuation, leasing assumptions, or risk profile of the shard which I'm doing a report for an investment committee on."
fieldIds: [1, 2, 3, 4, 5, 6]
)
}
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"error": null,
"result": {
"summary": "The following transactions could materially impact the valuation and leasing assumptions for The Shard: 1) Ampa Group has signed a lease for 11,800 sq ft at The Shard, indicating continued demand for office space in the area. 2) Allfunds Group has agreed to lease additional space nearby, reflecting the competitive leasing environment. 3) The acquisition by HUB and Bridges Fund Management of the 100,000 sq ft office at 42 Southwark Bridge Road for £36 million aims to convert it into a residential-led scheme, suggesting shifts in property use that may affect adjacent properties like The Shard.",
"transactions": [
{
"address_label": "32 London Bridge St London SE1 9SG UK",
"ai_snippet": "Legal and professional services company Ampa Group - which is best known for its full-service law firm Shakespeare Martineau – has signed to relocate to London's iconic Shard building. Ampa will be taking 11,800 sq ft on the 19th floor...",
"building_size": 11800,
"published_at": "2025-08-26T09:19:58Z",
"transaction_data_type": "Lease Transaction",
"transaction_date": "2025-08-26"
},
{
"address_label": "Tower Bridge Road",
"ai_snippet": "Allfunds Group will lease two floors at the office building on Tower Bridge Road in London.",
"building_size": "unknown",
"published_at": "2025-05-16T07:12:12Z",
"transaction_data_type": "Lease Transaction",
"transaction_date": "2025-05-16"
},
{
"address_label": "42 Southwark Bridge Rd London SE1 9EU UK",
"ai_snippet": "HUB and Bridges Fund Management have acquired 42 Southwark Bridge Road in London for £36 million with plans to repurpose the existing office on the prominent 100,000 sq ft site into a living-led scheme.",
"building_size": 100000,
"published_at": "2025-04-01T04:41:25Z",
"transaction_data_type": "Sale Transaction",
"transaction_date": "2025-04-01"
}
]
},
"warnings": {
"failed": [],
"skipped_due_to_content": [],
"timed_out": []
}
}
}
}
Error response examples
dataExtractionTransactionSmart returns errors inside the payload (error) and sets result to null.
A) No valid filters provided
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"result": null,
"warnings": { "timed_out": [], "failed": [], "skipped_due_to_content": [] },
"error": "No valid filters provided"
}
}
}
B) Maximum number of filters exceeded
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"result": null,
"warnings": { "timed_out": [], "failed": [], "skipped_due_to_content": [] },
"error": "Maximum number of filters is 5"
}
}
}
C) Invalid fields set
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"result": null,
"warnings": { "timed_out": [], "failed": [], "skipped_due_to_content": [] },
"error": "Invalid fields set"
}
}
}
This error occurs when all provided fieldIds are not in the allowed set (1-6). If some IDs are valid and some are not, only the valid ones are used.
D) Invalid party types
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"result": null,
"warnings": { "timed_out": [], "failed": [], "skipped_due_to_content": [] },
"error": "Invalid party types"
}
}
}
This error occurs when partyTypes is provided but all values are invalid (or the list is empty).
E) No datasets found
—[response]—
{
"data": {
"dataExtractionTransactionSmart": {
"result": null,
"warnings": { "timed_out": [], "failed": [], "skipped_due_to_content": [] },
"error": "No datasets found"
}
}
}
Contact / Support
Available through api@infabode.com
Back to Top
Insights
Privacy & Terms
Connect
Real Estate MCP
API Docs
Data Lake
Integrations
Advertizing
Use Cases
Contribute
Recruitment
Events