godmode_ prefix, noun first, in the order tools/list returns them. A *_lookup takes exactly one input out of its group and answers with the record. When the name matched several, it answers with resolved: false and candidates[]. The group is an id or a name. For the parcel, the group is a point, a street address with zip or city, an APN with county, or a property_id. A *_get returns one record for one id.
Everything else pages a list with limit and cursor. Every tool is read-only, non-destructive, idempotent and closed-world. The API serves every one of them to a key at api.investorlift.com. All twenty-six, with the full JSON schema of every input, are the mcp-manifest.json file, written from the same source as this page.
Rules that hold across the catalogue:
- Geometry. A point is
latitudeandlongitudewithradius_miles(0.25 to 20, default 2). A viewport isbboxas an object withwest,south,eastandnorth.property_idsearches around that parcel. - A place. On the deals search and summary, the investors nearby and the wholesale listings, a place is
zip(a list of 5-digit ZIPs) orcity. A city is the parcel’s postal city, in any case, and not the short-term rental jurisdiction. On the deals and investors tools, Free and Starter take one ZIP and no city (plan_limit), and the wholesale listings carry no plan limit. - One of the four, not two.
radius_mileswithbbox,property_idbeside either, orzipbesidecity, isgeometry_conflict. A point beside abbox, azipor acityis allowed and is the reference point for distances only.godmode_buyers_matchtakes no place and answersziporcitywith the samegeometry_conflict: it ranks near a point. A ZIP or a city no loaded market’s parcels carry isoutside_coverage, which names it (zips_unknown,city). - Lenders nearby. On
godmode_lenders_nearbythe API resolves the geometry to the H3 res-8 cells whose centre lies inside it. Each cell is about a third of a square mile. So the geometry’s edge is a hex boundary, not the circle. Each row’sin_geometrysays how many cells it became and how many carry the lender. - Exactly one. The four name lookups and the parcel lookup refuse zero or several of their input group before any
query. The refusal names every field of the group.
godmode_wholesale_listingsdoes the same for its three scopes. - Auto-resolve. A name opens a profile in two cases only. The first: exactly one candidate matched at the
exactlevel, andlicensecounts as exact for agents. The second: a single candidate matched attokensor better. Two exact hits, or a lonecontainsortrigramhit, come back ascandidates. A profile is where names and phones can appear, so the rule asks you to choose when the match is not certain. include_institutional. Lists hide iBuyers, production builders and bulk landlords by default.truekeeps every scale tier. If you givescalebeside it, the tool answers a conflict, becausescalealone already decides who stays.response_format,limitandcursor.response_formatisconcise(the default) ordetailed. Each format has its own cap onlimit, andcursorpages a list. The three tools that take no format always return everything:godmode_deals_summary,godmode_deal_getandgodmode_wholesale_listing_get.godmode_coveragetakes a format, which caps its three long lists in concise.
godmode_coverage
Which data is available where: every loaded market with one status per dataset. Also the planned markets, a place lookup, what this key can get and where the account stands. What it answers: which markets cover this place, for which datasets, and how fresh. Give at most one place: latitude with longitude, county (FIPS or name), zip, or market. No place: every market. Reading the response: data.markets has one row per market: the covering ones with a place, [] when none. Each row carries market, state, label, stage (general or beta), universe_kind, counties, bbox, point_tolerance_miles, data_end, dataset_version and stale. Its datasets are deeds, listings, agents, wholesale, auction, str, parcels, financing, permits, owner_profile, history, cash_sale, lenders and addresses. Each cell carries status: served, partial (some of its scope), not_measured (never measurable, do not wait) or not_published (wait for a build). Each cell also carries dated (a snapshot valued at as_of), stale (null: no rule), as_of and gate (the error where not served). Each cell ends with granularity, scope (its items, a status each) and features (lenders). place_status reads served or outside, and null where the grain is undecidable. str_cities and history_zips summarise two scopes, beside the as-of dates and the lenders block. data.place carries input, status (covered or outside), markets and counties. data.planned is intent, not a commitment. account carries plan, tier, period_end, credits (grant, line, used, remaining, budget), limits, requests and counters. key_scope, contact_via_mcp and on_behalf_of_present say what this call can get. Gotchas: a new market arrives without a code change, so read this list, not memory. A place nothing covers is a normal result, never an error. Concise drops the scope list of every cell and caps history_zips at ten. Detailed carries the whole row. remaining lags X-Credits-Remaining by the gateway’s one-minute cache. meta.contact reads not_on_lists.godmode_deals_summary
Counts and medians for investor deals in a radius, a viewport or around a parcel. What it answers: “How active are investors here, and what does a typical deal look like?” One object, no paging. Inputs: one location: latitude and longitude with radius_miles, bbox, property_id, zip (a list) or city. The shared filters narrow the set. investor_id scopes it to one buyer, and deal_id to one deal. Reading the response: n_deals is the count after the filters. by_kind, by_buyer_status, by_year and by_scale each sum to it, but by_investor_kind and by_channel do not. A deal counts under every kind its investor carries, id-less buyers in the null bucket. It counts in every channel bucket whose flag it carries (from_wholesaler, from_investor, distressed, auction), plus other_or_unknown for the rest. In a market without published auction counts, auction is null. by_year is by purchase date, oldest first, undated deals (n_undated) last. n_parcels counts a parcel once, and n_investors counts registered investors only. Both median_bought_price and total_volume use priced purchases (n_unpriced left out). The resale, hold and profit medians use resold deals. Each is null when nothing qualifies. The API follows an old investor_id (meta.resolved_from). Gotchas: the tool hides institutional investors unless include_institutional is true or scale lists institutional, and public bodies unless include_public is true. A price_min or price_max filter drops unpriced deals, and bought_after or bought_before undated ones, unless include_unpriced or include_undated is true. In Texas most off-market purchases carry no price, so price medians there use few rows. A location outside every market is an error that names the markets. meta.contact reads not_on_lists.godmode_deals_search
Lists the investor deals inside a radius, a viewport or around a parcel. Each row carries its parcel, dates, prices, profit and the investor who bought. What it answers: “What did investors buy and sell near here, and who bought it?” One page per call. Inputs: one location: latitude and longitude with radius_miles, bbox, property_id, zip (a list) or city. The shared filters narrow the set. investor_id scopes it to one buyer, and deal_id to one deal inside the geometry. The sort orders the page: distance with a point, date_desc with a bbox alone. A page carries no total. Reading the response: kind is the deal kind: flip, wholesale, hold, long_hold, other or build. Prices are whole dollars: null, never 0, means the deed carried no price, and price_quality says which prices the row has. A registered investor has investor.name set. Without an investor id, name is null and buyer_status says why. The block listing is the MLS listing on a holding, and wholesale_listing the Investorlift listing this deed closed. Contact details are never on this list (meta.contact not_on_lists). Concise (default) keeps the core facts, the parcel’s address and size, the investor’s id, name, kind and scale, and the first listing agent’s id. Detailed returns every field, seller, end_buyer and owner included. Gotchas: the list hides institutional investors unless include_institutional is true or scale lists institutional, and public bodies unless include_public is true. The sort distance with a bbox and no point is an error. So is bought_on_investorlift where the market has no Investorlift tables. The API follows an old investor_id (meta.resolved_from). A retired one is an error. Credits (public tier): one per deal new to the account; see the concepts resource.godmode_deal_get
Returns one investor deal by id: the parcel, the dates and prices, the investor and the counterparties. On a confirmed current holding, the owner block names the person to contact about the house. What it answers: “Tell me everything about this deal” and “Who owns this house now, and how do I reach them?” Input: deal_id (deal_ plus 32 hex). Reading the response: data is the full deal row, the same shape as a detailed search row, with distance_miles null (no reference point). The row carries owner only when deal_type is HOLDING and ownership_confirmed is true. A PURCHASE row, with no resale and no ownership confirmation yet, has owner null, and so does every resold row. Contact fields: owner.names (given-first), owner.mailing and the listing agents’ names, phones, emails and licence numbers. They are present when this key can get contact through this server. Then meta.contact reads served and the API audits the call. Otherwise they are null with contact_redacted true (meta.contact redacted_no_scope): a rule, not absent data. For an entity owner, owner.names[].surname carries the whole entity name and given is null. n_parcels_in_event above 1 means a bulk buy: the investor bought that many parcels the same day. The row names seller and end_buyer only when they are registered investors. It never names a household, only its kind (PERSON, TRUST or ENTITY). The block listing is the MLS listing on a holding, and owner_test says if it is this investor’s. The block wholesale_listing is the Investorlift listing this deed closed. Gotchas: the tool returns a deal reached by id whatever its buyer, institutional or public included. An id that no longer exists is not_found. A data refresh can retire a purchase row when its resale deed arrives. An id without the deal_ prefix is invalid. Nothing here is consent to call or text the people named. Credits (public tier): one per deal new to the account; see the concepts resource.godmode_buyers_match
Ranks the investors who bought near a house as buyers for it. What it answers: “I have a house under contract here: who nearby buys houses like it?” A ranked page of investors with a 0 to 1 score and the reasons in words. A row has what the investor did in the radius, sample deals, MLS listing and Investorlift purchase counts. The reasons are proximity, recency, price fit, strategy, segment and wholesale buyer. Inputs: a location as latitude and longitude with radius_miles (0.25 to 20, default 2), a bbox or property_id. A property_id also fills segment, beds and sqft from the parcel. zip and city are refused: the match ranks near a point. Subject facts shape the score and never remove investors: subject_asking_price and subject_arv in dollars, subject_condition and subject_segment. w_ weights reweight the factors (not all 0). w_activity (0 to 1) adds the operator’s chance to buy within 180 days. Filters remove investors and never score: active_within_months, kind, the price bounds, the wholesale and auction flags, investor_kind_exclude, scale, the institutional and public switches. Concise (the default) keeps two sample deals. Detailed returns every field. Reading the response: score is gate times the weighted sum. reasons[] explains each factor. summary counts the whole radius while data holds one page. Rows that share investor.operator_id are one operation: contact it once. buyer_signal.cycle_state says where the operator is in its capital cycle. Contact details are never on this list: meta.contact reads not_on_lists. Gotchas: the tool hides institutional buyers unless include_institutional is true or scale lists institutional. A point outside every loaded market is an error that lists them. In Texas most purchase prices are null, so price fit is weak there. Credits (public tier): one per investor new to the account, plus 2 a call; see the concepts resource.godmode_investors_nearby
Lists the investors active inside an area, one row per investor, ranked by what they did there. What it answers: “Who buys, holds or flips houses around this location, and how active is each one here?” Inputs: one location: latitude and longitude with radius_miles, bbox, property_id, zip (a list) or city. The sort orders the rows by what they did inside the geometry (events_desc by default). The shared deal filters apply before the rollup: kind, price_min, bought_after, segment, investor_kind, scale, buys_wholesale and more. Reading the response: investor is the market-wide record (kinds, scale, last_bought_on). The block in_radius is what they did inside this geometry after the filters (n_events, n_parcels, volume, last_bought_on, n_flips). Rows with one investor.operator_id are one buying operation. listings counts what they have on the MLS now, and wholesale_purchases what they bought off Investorlift. Both are null where the market has no such tables. summary covers the whole geometry, not the page. Contact details are never on this list (meta.contact not_on_lists). Concise (default) keeps the identity, in_radius and count fields. Detailed returns every field. Gotchas: the list hides institutional investors unless include_institutional is true or scale lists institutional. It hides public bodies unless include_public is true. Buyers without an investor id never appear here. A location outside every loaded market is an error that names the markets. The API follows an old investor_id (meta.resolved_from). A retired one is an error. Credits (public tier): one per investor new to the account; see the concepts resource.godmode_investor_lookup
Opens one investor’s profile by id, or finds the investor behind a name and opens the profile when the match is unambiguous. What it answers: “Tell me about this investor” and “Find this investor by name”. Inputs: exactly one of investor_id (inv_ plus 12 hex) or name: a person, LLC, trust or brand, under any deed name. Add market to narrow a name search, or when an id exists in several. n_deals_min and include_public shape a name search. Reading the response: resolved true carries data, the profile, with kinds, scale, counts by deal kind, first and last deed and days since last purchase. It has price_band, segment_mix, member_names, buyer_signal (cycle_state, activity_p_180), listings, wholesale_purchases and agent_links. It has contact when the key can get contact through this server: person members (given and surname), mailing addresses and skip_trace_targets. With resolved false, candidates lists each matching investor with id, name, market, match level (exact, tokens, contains, trigram) and deal count. A name resolves only when exactly one investor matches at the exact level, or a single investor matches at tokens or better. A lone contains or trigram hit stays a candidate. The capped flag is true when more matched than the list holds. Old ids merged into this one appear in meta.resolved_from. Formats: concise (default) omits members[], id_history and the classifier diagnostics. It caps names and cities at 10, and addresses, skip-trace targets and agent links at 5. Detailed returns the whole profile, over 50 KB for a large investor. Gotchas: a retired id is an error. operator_id can move after a refresh, so it groups rows within one response. A deed carries a name as SURNAME GIVEN, so read given and surname. Without contact access, member_names lists entities and trusts only, and contact is null with contact_redacted true. Credits (public tier): one per investor new to the account; see the concepts resource.godmode_investor_deals
Lists every deal of one investor across the whole market: what they bought, what they sold and what they made, as deal rows with coordinates. What it answers: “What did this investor buy and sell, and what was the result of each deal?” Inputs: investor_id (inv_ plus 12 hex). role picks the side: buyer (the default), seller, or any for both plus end-buyer rows, each deal once. listing_status keeps holdings by the MLS listing on the parcel. With source investorlift, the list keeps deals whose deed closed an Investorlift listing. The sort is date_desc by default. Add market only when the id exists in several loaded markets. Reading the response: each row is one deal: kind, the dates and prices, hold_days, gross_profit, price_quality, the parcel (property) and the buyer (investor). With role seller or any, investor on a row is the buyer, often a household without an id. Then its name is null and buyer_status says why. A hold row carries listing (status, list_price, owner_test, counted) when the parcel has an MLS record, and wholesale_listing when the deed closed an Investorlift listing. Contact details are never on this list (meta.contact not_on_lists). Concise (default) keeps the deal facts and the parcel and buyer identity. Detailed returns every field. meta.resolved_from lists an old id. Gotchas: in Texas most purchase prices are null. So bought_price and gross_profit are null while sold_price is known (price_quality SELL_ONLY). The input listing_status is an error where the market has no listing tables (listings_unavailable), and source investorlift where it has no wholesale tables (wholesale_unavailable). A retired id is an error. Credits (public tier): one per deal new to the account; see the concepts resource.godmode_property_lookup
Opens one parcel with its owner, MLS listing, deeds and Investorlift listings. What it answers: “Who owns this house, how do they hold it, and what occurred on this parcel?” Inputs: exactly one of latitude plus longitude (WGS84), address, apn or property_id. A point opens the nearest parcel within 100 metres, else not_found. One form is address (the street line as the county records it, with zip or city; unit picks one unit of a building). apn dashes are optional and county narrows it. Concise (the default) keeps the five newest deals and three newest Investorlift listings. Detailed keeps all. Reading the response: resolved true carries data, the parcel: address, coordinates, segment, beds, baths, square feet, year built. owner has kind, owner_occupied, absentee, holding_kind, held_since, last_purchase, permits. Names and mailing need a confirmed investor holding on a contact key, else null with redacted_reason. listing is the MLS record or null, and deals[] is newest first with the hold row as the current holding. Detailed rows carry financing (the purchase loan the registry found; dated, stamped in meta.dated[]). wholesale_listings[] are the Investorlift listings, null where not published. resolved false carries candidates: the APN or address names several parcels (id, county_fips, city, unit, n_deals). For one building’s units, pass unit. Gotchas: a point beyond every market’s tolerance is outside_coverage. An address lookup with no published address table is addresses_unavailable. Households and public bodies stay unnamed. Without contact access owner.names and owner.mailing are null (contact_redacted true). In Texas most purchase prices are null. Credits (public tier): one per parcel new to the account; see the concepts resource.godmode_agent_lookup
Opens one listing agent’s profile by id, or finds the agent behind a name or a state licence number. What it answers: “I have an agent’s name or licence number: who are they, what do they list, and is it their own inventory?” Pass agent_id or name_or_license, and market to narrow a name search or to pick the market of an id in several. Reading the response: resolved true carries data, the profile: kind, identity_basis and license_candidates, brokerages, listings (counts by status and year), n_self_listings and investor_links. With contact access through this server the profile also has name, name_variants, license and contact (phones and emails). The investor_links are the investors the agent is a person member of. resolved false carries candidates and capped, true when more matched than the list holds. A candidate has id, market, match level (license, exact, tokens, trigram), similarity, brokerage and listing counts. A name resolves only when exactly one candidate matches at the license or exact level, or one alone matches at tokens or better. A lone trigram hit never does. Store the current id: meta.resolved_from lists old ids merged into it. Concise (the default) keeps five brokerages and investor_links and ten name_variants, with the cuts in meta.truncated. Detailed returns the whole profile. Gotchas: name, name_variants, license, contact and the candidates’ names and licence numbers are contact fields, null with contact_redacted true without contact access. The profile still opens by id. license is also null when none matched. A licence number matches exactly. A retired id is an error that says so. A licence-keyed agent has one id across markets and is one candidate per market. A market without a published agent registry answers agents_unavailable.godmode_agent_listings
Lists every listing of one agent the MLS feed knows, newest first. What it answers: “What has this agent listed and sold, and which of it was their own inventory?” Pass agent_id (agt_ plus 12 hex), and market only when the id is in more than one loaded market. status keeps a row when any listed value matches, as the registry recorded it at meta.coverage[].agents_data_end. Its values are ACTIVE, PENDING, SOLD and OFF_MARKET. Both listed_from and listed_to read the date the listing went live, as YYYY-MM-DD. A true self_only keeps only the agent’s own inventory: the listings on parcels of an investor the agent is a person member of. Page the rows with limit and cursor. Reading the response: a row carries property_id, address_short, city and zip, is_self_listing, holder and listing. The holder is the parcel’s investor as the registry recorded it, with investor_id, name and display_name. It is null for a household, a public body or an unregistered owner. listing has status, list_price (the asking price), listed_on and sold_on. The last page has a null page.next_cursor. Contact details are never on this list: meta.contact reads not_on_lists. Concise (the default) is 20 rows, at most 50, and drops the agents inside each listing. Detailed is 5, at most 10, with the whole listing block: owner_test, counted, price history, brokerage and agents. Its agents carry ids but null names, phones and licences. Gotchas: the feed keeps one listing per parcel, the latest, so a parcel relisted by the same agent counts once. It names agents fully only from about 2018. The listing block’s status and days read the feed at listings_data_end (its last update), never today. The busiest agents have thousands of rows, so page. A retired id is an error that says so. A market without a published agent registry answers agents_unavailable. When a registry run merged the id, meta.resolved_from lists the old ids.godmode_wholesale_listings
Lists Investorlift listings with the outcome the county deeds show: if each closed, to whom, and for how much. What it answers: “Which listings near here did investors buy?”, “What did this wholesaler list?” and “Which listings did this investor buy?” Inputs: exactly one scope. A location: latitude and longitude with radius_miles, bbox, property_id, zip (a list) or city. It lists the listings inside it with summary, counts over the whole area. Beside a geometry, wholesaler_id and buyer_investor_id are filters. Alone, wholesaler_id lists every listing of one company, and buyer_investor_id the listings one registry investor bought. market picks the market when an id exists in several. Filters: outcome, verification, buyer_tier, known_investor, listed and closed date ranges, the asking range and primary_only, true by default: one row per closing deed. The sort defaults to closed_on. Reading the response: verification is the verdict (CONFIRMED, RETAIL, OPEN, NONE), outcome the detail. confidence says how sure the deed match is. The block buyer names only a registry investor (buyer.id set) or an unregistered company. On any key, the row never names a person, a trust or an owner-occupant: buyer.tier describes it. deed.price is null in a non-disclosure state such as Texas unless an MLS sale matched. The Investorlift app’s own listing status is never served: the deed says what occurred. Concise (default) keeps the address, prices, verdict, buyer and deed per row. Detailed returns every field. Gotchas: a market without published wholesale tables is an error that says so. A hidden-address listing with no closing deed appears under its wholesaler only. primary_only false lists SUPERSEDED rows and every member of a shared closing. A closed date range drops rows without a deed. No wholesale row carries contact fields, so meta.contact reads not_on_lists.godmode_wholesale_listing_get
Opens one Investorlift listing by id with everything the deeds show about it. The record carries the buyer, the closing deed, the chain of title and the retail signals. What it answers: “What is the outcome of this Investorlift listing?” Input: wholesale_listing_id (wl_ plus 32 hex). Reading the response: data is the full listing row. The field verification is the verdict (CONFIRMED, RETAIL, OPEN, NONE), outcome the detail and outcome_text the sentence to show. The confidence field says how sure the deed match is. The block buyer names only a registry investor (buyer.id set) or an unregistered company. On any key, the row never names a person, a trust or an owner-occupant: buyer.tier describes it. The block intermediate names the party that held title between the homeowner and the end buyer on a double close, only through its registry id. The block deed carries closed_on, pattern, price and price_basis: RECORDED, or MLS_DERIVED in a non-disclosure state. The fields lister_on_title and lister_attribution say if the listing company held title and if this listing holds the credit for the deed. The list retail_signals names the tests that fired. On a SUPERSEDED row, superseded_by_id points to the listing that holds the credit. The Investorlift app’s own listing status is never served: the deed says what occurred. distance_miles is null (no reference point). The tool returns every field and has no concise format. Gotchas: the API looks the id up over every loaded market with published wholesale tables. So a market without them is an error only when none has them. An unknown id is not_found. Another prefix (deal_, prop_) is an invalid id. No wholesale row carries contact fields, so meta.contact reads redacted_no_scope on every key.godmode_wholesaler_lookup
Opens one Investorlift listing company’s profile by id, or finds the company behind a name and opens the profile when the match is unambiguous. What it answers: “Tell me about this wholesaler” and “I know the company’s name, find it”. Inputs: wholesaler_id (wsr_ plus 12 hex) or name, a company, brand or legal entity name or part of one. Add market to narrow a name search, or when a company lists in several. Reading the response: resolved true carries data, the profile, with name, brands, entity_names (own and partner legal entities) and home_state. It has investor_id when the company itself buys as a registry investor, and counts by what the deeds show (n_listings, n_verified, n_to_investors and more). It has the first and last listing dates, median_asking_price, median_days_to_deed and top_buyers, the registry investors who bought most from it. A company in two markets has a profile per market. With resolved false, candidates lists each matching company: id, market, name, counts, matched_name, match level and similarity. The flag capped is true when more matched than limit allowed. A name resolves only when exactly one company matches at the exact level, or a single company matches at tokens or better. A lone contains or trigram hit does not. Concise (default) caps brands and entity names at 10 and top_buyers at 5, and names each cut in meta.truncated. Detailed returns everything. Gotchas: every name here is a business name, served to every key. The API names a buyer only as a registry investor or an unregistered company. The Investorlift app’s own listing status is never served. A market without published wholesale tables is an error that says so. Under 3 letters or digits in name is a validation error. No wholesaler row carries contact fields, so meta.contact reads redacted_no_scope on every key.godmode_property_search
Searches parcels by location, filter groups and quicklists over every parcel of the loaded markets. What it answers: “Which houses here match these criteria?” Example: absentee owners with high equity and a recent permit in a ZIP. Inputs: location, filters, quicklists, any_quicklists, not_quicklists, datasets, sort, limit, cursor, count_only and require_current. The filters groups are general, building, lot, legal, owner, sale, tax, listing, valuation, financing, liens, permits and history. Every field is optional, and a range is {min, max}. A parcel must match all of quicklists, one of any_quicklists and none of not_quicklists. Reading the response: data[] rows carry id, address, general, building, lot and the requested owner, sale, tax, listing, valuation, financing, permit and history blocks. The summary block carries datasets and dated_filters. The list meta.dated[] names every dated snapshot block (valuation, financing) with its as-of date. Gotchas: the valuation, financing and liens groups read a snapshot valued at the date in meta.coverage[].parcel.financing.as_of, not the current delivery. A market without the parcel tables is parcels_unavailable. cash-buyer and sale.cash_sale are cash_sale_unavailable where sale_mortgage_measured is false. The history group and quicklists like price-cut-listing match only parcels in the history ZIP set (meta.coverage[].parcel.history.zips). Owner names are never on this tool. The error for an unknown quicklist names the dataset that unlocks it. Credits (public tier): one per parcel new to the account; see the concepts resource.godmode_property_financing
Reads the financing of one parcel at the slice date. The record carries the AVM with equity and LTV, every open lien with lender, balance and rate, the recorded mortgage history and the involuntary liens. What it answers: “What financing is on this house, how much equity is in it, and who lent on it?” Inputs: property_id and require_current. Reading the response: data carries as_of, dated, valuation, summary, open_liens[], mortgage_history[] and involuntary_liens[]. valuation carries estimated_value, range, equity_percent and ltv. The summary block carries open_lien_count, open_lien_balance, the first lien, has_heloc, free_and_clear and the last recorded mortgage with its lender_class. Its lender_class is BANK, NONBANK, PRIVATE, INDIVIDUAL or GOVERNMENT. The borrowers and parties keys are names, so they are present only when the key can get contact through this server. Otherwise the record leaves them out (meta.contact reads redacted_no_scope). Gotchas: every value is as of data.as_of, the same date as meta.coverage[].parcel.financing.as_of, and meta.dated[] says so. A lien released since then still shows as open. A parcel outside the slice is not_found. Zero open liens is a value (free and clear), not missing data. Credits (public tier): one per parcel new to the account; see the concepts resource.godmode_property_permits
Lists every building permit on one parcel from the jurisdictions’ own rolls, newest first, with the per-parcel aggregates. What it answers: “What work has a permit on this house, and is any of it still open?” Inputs: property_id. Reading the response: data.summary carries n_permits, n_permits_24m, last_permit_issue_date, n_open_permits_12m, major_work_36m, tags_24m and job_value_24m, and is null when the parcel has no permit. Each row of data.permits[] carries jurisdiction, permit_number, type, status, tags, the dates and job_value where reported. status is final, active, inactive or in_review. The normalised tags include Solar, Pool and Hot Tub, ADU, New Construction and Remodel. The tool never serves applicant names or contact details. Gotchas: about half of Maricopa permits report job_value, and few elsewhere do. A blank status means the jurisdiction reports none. The snapshot date is data.as_of. Credits (public tier): one per parcel new to the account; see the concepts resource.godmode_property_history
Reads what changed on one parcel week by week since the history lake began. The events cover owner changes with the deed that week, listing moves (listed, price cuts, sold, delisted), assessment and tax changes, and vacancy. Inside the dated window, they also cover the financing events. What it answers: “What changed on this house over the last year?” and “when did it change hands, get listed, or go vacant?” Inputs: property_id, domains[] (some domains only), since (a week, YYYY-MM-DD) and limit. Reading the response: data.summary carries first_week, last_week, owner_changes_3y, last_owner_change, listing_cycles_1y, price_cuts_current_listing, vacant_since and delinquent_since. data.coverage is per domain. The list data.events[] runs newest first, each event with week, domain, kind, before, after, deed and span_weeks. The count span_weeks is the weeks since the lake last saw the parcel, more than 1 across a delivery gap. The payload columns that name a person are present only when the key can get contact through this server. They are owner names and mailing, agent names, licences and keys, the listing office, borrowers and lien parties. Otherwise the record leaves them out (meta.contact reads redacted_no_scope). Gotchas: only parcels in the ZIP codes the lake covers have a timeline. Another parcel answers history_unavailable, and the coverage tool lists the ZIP codes as history_zips. The lake dates an event to the week it saw the change, never to a guessed week inside a gap. Valuation and financing events exist only inside their delivery windows. Credits (public tier): one per parcel new to the account; see the concepts resource.godmode_listing_history
Reads every listing cycle observed on one parcel, with its price path, how it ended and the days on market. A cycle ended sold, canceled, expired, withdrawn or off market, or is still active. What it answers: “How many listings did this house have, at what prices, and did it sell?” Inputs: property_id. Reading the response: data.cycles[] runs newest first. Each cycle carries cycle_no, first_week, last_week, listed_on, original_price, last_price, min_price, n_price_cuts, status_path, outcome, sold_price, sold_on, days_on_market and price_path[], every listing event of the cycle. The fields agent_name and agent_license, the first agent and their licence number, are present only when the key can get contact through this server. Otherwise the cycle leaves them out (meta.contact reads redacted_no_scope). Gotchas: cycles come from the weekly files since the lake began (meta.coverage[].parcel.history.first_week), for the ZIP codes it covers. Elsewhere the API answers history_unavailable. A cycle still active at the last week has outcome active. A cycle whose last status was neither active nor terminal is unknown. Credits (public tier): one per parcel new to the account; see the concepts resource.godmode_property_comps
Reads the comparable sales around one parcel, most similar first. The comps are the priced sales inside the radius and the window, on parcels within the bedroom, size and age tolerances of the subject. The list holds one sale per parcel. What it answers: “What did houses like this one sell for nearby, and what price per square foot does that give this one?” Inputs: property_id, radius_miles, days_back, limit, the tolerances beds_tolerance, sqft_pct and year_tolerance, and source. Reading the response: data.subject carries the parcel and the facts the tolerances read. Each row of data.comps[] carries distance_miles, sold_on, sold_price, price_per_sqft, the building facts, source, cash_sale_proxy, last_sale_lender, deal and similarity (0 to 1). Its source reads DEED, the registry’s arm’s-length purchase, or MLS, a SOLD listing with days_on_market and list_price. The API serves cash_sale_proxy and last_sale_lender where the market has the parcel layer, and cash_sale_proxy is null where unmeasured. The deal block is the registry’s exit within 45 days of the sale, with gross_profit and hold_days, or null. data.summary carries the counts by source, median_price, median_price_per_sqft, price_per_sqft_value, min_price, max_price, the window, sources and the tolerances applied. The value price_per_sqft_value is the median times the subject’s sqft: an indication, not a valuation. Gotchas: the comps carry no time or condition adjustment. The API skips a tolerance the subject cannot apply (summary.tolerances). Without listing tables, source mls is listings_unavailable, and source both has no MLS side there (summary.sources). The medians are over the comps returned. Credits (public tier): one per parcel new to the account, plus 2 a call; see the concepts resource.godmode_market_changes
Reads the weekly change series of one ZIP. The metrics are owner changes, new listings, relists, price cuts and rises, sales, delistings, vacancy and delinquency onsets and cures, and new mortgages. They also cover lien releases, involuntary liens, assessment and AVM changes, the median AVM move and permits issued. What it answers: “Is turnover up in this ZIP?”, “how many price cuts a week lately?”, “did new mortgages fall off?” Inputs: market and zip, one of the ZIPs the history lake covers, with weeks and metrics[]. Over 52 weeks on Free and Starter is plan_limit. Reading the response: data.weeks[] runs oldest first, each week with week, file_kind (FULL or DELTA), parcels_observed, n_events and metrics{}. The window applied is data.weeks_applied, with data.first_week and last_week as its edges. The block data.totals is per metric over the weeks. Gotchas: a DELTA week observes only the changed parcels. So parcels_observed is the file’s row count for the ZIP, not the ZIP’s size. The financing metrics exist only inside the dated window (meta.dated[]). A ZIP outside the lake’s set is history_unavailable.godmode_lender_lookup
Opens one lender’s profile by id, or finds it by any spelling of its name and opens an unambiguous match. What it answers: “Who is this lender, how much do they lend here, and to whom?” Inputs: lender_id or name, and market to narrow either to one market. Reading the response: with resolved true, data carries names[], lender_class with class_basis (NAME or DICTIONARY), is_hard_money, nmls and the totals over markets[]. Each market profile carries counts by year, product and purpose, terms, geography, rankings, borrowers, investor_lending, flips_financed, successor, id_history and a summary. The successor is the acquirer or parent, and id_history lists the ids merged in. The registry never merges books. With resolved false, the body carries candidates[] (id, market, matched_name, match, size) and capped, true when more matched than the list holds. A lone contains or trigram hit stays a candidate. Concise (the default) drops the monthly series and the pairing diagnostics. It keeps ten ZIPs, cities and spellings, five top borrowers, competing lenders and investors, and three flip years. Gotchas: the registry measures every count at as_of (meta.dated[]), not today. The history sees about one open lien in five, so all-time counts are floors and churn is a lower bound. Margins are null under 20 resold flips. A block not built for the market is null. A person-named lender has a profile only with 10 or more loans on 5 or more parcels. A retired id is gone. No lender carries a phone or email, and no person’s name is on the profile. A market with no registry is lenders_unavailable.godmode_lenders_top
Ranks the lenders of one market, or of one ZIP, city or county inside it, one page at a time. The rank counts instruments recorded over a period, by default the 24 months to the slice date. What it answers: “Who lends the most here, and which hard-money lenders are active in this ZIP?” Inputs: market, and one of zip, city or county to rank inside a place. period, hard_money, position and product narrow the count. Reading the response: each row carries rank and lender (id, name, lender_class, is_hard_money). The field n counts the instruments in the period once across the open-lien and recorded-history tables. The row also carries volume, share and share_by_volume, n_open_liens, open_balance, median_amount, last_recorded_on, n_purchase_money, n_investor, n_borrowers, n_deals_financed, as_of and dated. Both shares are of every lender’s total, and null under position or product. n_deals_financed is null before the deed link. Concise (the default) drops n_unpriced, n_first_lien, n_heloc and n_parcels. Gotchas: n counts every instrument, purchase money and refinance alike. The list leaves out INDIVIDUAL, PRIVATE and GOVERNMENT lenders. A geography outside the covered counties is outside_coverage. A covered geography with no lending is an empty page. A period the place does not carry is a validation error. The registry measures everything at as_of (meta.dated[]), not today. A market with no registry is lenders_unavailable. So is a registry built before the place rankings, for any period but 24m.godmode_lender_loans
Lists one lender’s loans in one market, newest recording first, one page at a time. What it answers: “What did this lender fund this year, where, on what terms, and for whom?” Inputs: lender_id, and market only when the id is in several loaded markets. Filters: source, recorded_from and recorded_to, product, term_band, amount_min, amount_max, zip and city. Reading the response: each row carries the parcel, source and position, in_both, lender_id and lender_id_open, the lender as recorded, the dates, amount and balance. Balance is on open rows only. The row also carries rate and term, term_band, loan_type, label, product, product_proxy and purpose. The deeds decide purpose, never the label. It ends with deed (on a PURCHASE row), deal (the investor deal it funded), outcome, investor_id, borrower_match, as_of and dated. Concise (the default) is 20 rows, at most 50. It drops market, loan_key, the outlier and pairing flags, identity_basis, label_as_recorded, product_basis, open_position, assigned_lender_name, blanket_n_parcels, county_fips, property_type_category, months_to_resolution, the borrower arrays, borrower_match and foreclosed. It also drops the deed’s date and, inside deal, all but deal_id, kind, is_purchase_loan and investor_id. Detailed is 5, at most 10, and returns the whole row. Gotchas: the borrowers on a loan are contact fields, so this list leaves them out of every row, on any key (meta.contact reads not_on_lists). The busiest lenders have hundreds of thousands of rows: cut a window. The registry measures every row at as_of (meta.dated[]), not today. The history sees about one open lien in five, so older rows are a floor. Before the deed link, purpose, deal, outcome and investor_id are null. A market with no registry is lenders_unavailable.godmode_lender_borrowers
Lists one lender’s borrowers in one market, most loans first, one page at a time. What it answers: “Who borrows from this lender, which of them are registered investors, and who else funds them?” Inputs: lender_id, and market only when the id is in more than one loaded market. Filters: period, q, registered_only, churned, investor_kind and min_loans. Reading the response: each row carries borrower_key, name, investor, is_entity, is_person, borrower_match, n_loans, n_loans_24m, volume_24m, last_loan_on, n_lenders_used_24m, other_lender_ids, churned, churn_measured, moved_to_lender_id, n_deals_financed, as_of and dated. The key borrower_key is a salted hash, the same on every lender’s rows. name is a company’s, and null for a person. The investor block carries id, name, kinds, scale and n_deals, and is null when the key resolves to none. Concise (the default) is 20 rows, at most 50. It drops market, party_key, n_loans_12m, first_loan_on and other_lenders, the stubs behind the ids. Detailed is 5, at most 10, and returns the whole row. Gotchas: a person’s name and party_key are contact fields, so this list sets them to null on every row, on any key (meta.contact reads not_on_lists). The list serves a company’s name and investor.name. churned is a lower bound of leaving, because the history sees one loan in five. With churn_measured false, the registry cannot read churn for the row. The registry measures every count at as_of (meta.dated[]), not today. A market with no registry, or one built before the borrower match, is lenders_unavailable.godmode_lenders_nearby
Ranks the lenders active inside an area by instruments recorded there over a period, one page at a time. What it answers: “Who lends around this house, and which hard-money lenders fund deals in this neighbourhood?” Inputs: one geometry: latitude and longitude with radius_miles, bbox, or property_id. Filters: period, hard_money, lender_class, include_persons, include_government, position and product. Reading the response: the API resolves the geometry to the H3 res-8 cells whose centre lies inside it (about 0.3 square miles each). So its edge is a hex boundary, not the circle. Each row carries rank, lender (id, name, lender_class, is_hard_money), n and volume inside those cells, and in_geometry. The block in_geometry carries res, n_cells and n_cells_lent: the cells the geometry resolved to, and the cells the lender is in. The row also carries the market-wide n_open_liens, open_balance and median_amount, last_recorded_on inside the cells, n_purchase_money and n_investor, as_of and dated. Five fields are null, not measured over an arbitrary set of cells: share, share_by_volume, n_unpriced, n_borrowers and n_deals_financed. Concise (the default) drops n_unpriced, n_first_lien, n_heloc and n_parcels. Gotchas: the list leaves out INDIVIDUAL, PRIVATE and GOVERNMENT lenders unless you ask for them. A point outside every loaded market is outside_coverage. A geometry outside the named market is a validation error. The registry measures everything at as_of (meta.dated[]), not today. A market with no registry, or one built before the place rankings, is lenders_unavailable.Resources
Prompts
The recommended workflows. A client that exposes prompts shows them as commands (Claude Code as/godmode:<name>). Prompts and chaining describes each one. A key at api.investorlift.com lists all seven.