Skip to main content
Every list on api.investorlift.com is JSON, paged with a cursor. A spreadsheet is a loop over those pages. Ask for the largest page your plan allows. Write the rows. Follow page.next_cursor until it is null. This request gets every flip and wholesale deal bought since August 2024 within two miles of a house in Scottsdale, newest first:
This is the same loop in Python. It flattens the nested blocks into the columns a spreadsheet wants and writes them as it goes:

What to know

  • The page size is your plan’s. The API lowers a limit above the plan’s largest to that largest. It does not refuse it. page.limit says what the API used. Plans and limits has the number per plan.
  • Every new deal is a credit. Each deal the export gets for the first time costs one credit. A deal your account already holds costs nothing again while the plan has credit. X-Rows is the size of the body, not a charge, and X-Credits-Charged is what the page cost. Narrow the geometry and the filters before you page. Two years of flips and wholesale deals within two miles is hundreds of rows, and the whole market is hundreds of thousands (Plans and limits).
  • A data refresh invalidates the cursor. A 400 invalid_cursor in the middle of a long export means a refresh rebuilt the tables. Start again from page 1, and keep meta.coverage[].dataset_version beside the file so you know which build it came from (Pagination).
  • A null price is an answer. bought_price and sold_price are null when the deed carries none. This is common on Texas off-market deeds. Write the null. Do not turn it into a zero.
  • Names are entities. investor.name is the LLC or trust. A buyer with no investor id (usually a household) has a null name. The API does not serve the people behind an entity on this host (Authentication).

Partners and staff

Staff and contracted partners reach the internal host on the company network with a gm_ key. On that host, nine endpoints also answer Accept: text/csv. They stream the whole filtered set as a file and ignore pagination. The nine are /v1/deals, /v1/investors, /v1/investors/{id}/deals, /v1/buyers/match, /v1/wholesale-listings, /v1/investors/{id}/wholesale-purchases, /v1/wholesalers/{id}/listings, /v1/str-parcels and /v1/lenders/{id}/loans. The cap is 50,000 rows. Above it, the API answers 422 csv_cap_exceeded with the cap in the body and the X-Row-Cap header. The API ignores limit and cursor, and the set streams in the sort you asked for. CSV has its own budget of 12 exports a minute per key, one at a time (Rate limits). The contact columns appear on a contact-scope key only. On a deals-only key the owner columns are absent, and the Investor cell is blank for a buyer with no investor id. If you ask any endpoint outside the nine for CSV, the API answers 406 not_acceptable. On api.investorlift.com one route has a CSV representation. GET /v1/lenders/{id}/loans answers Accept: text/csv from Growth. It requires a recorded_from window, keeps the same 50,000-row cap, costs 0 credits and leaves the borrowers column out. On every other /v1 call the gateway asks the API for JSON.