Call the Crexi Scraper from Python with the official apify-client. This calls the hosted Actor — no scraper code in your project.
pip install apify-clientfrom apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("logiover/crexi-scraper").call(run_input={
"propertyTypes": ["Retail"],
"states": ["TX"],
"fetchDetails": True,
"fetchBrokers": True,
"maxResults": 200,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Got {len(items)} commercial listings")
print(items[0])from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("logiover/crexi-scraper").call(run_input={
"propertyTypes": ["Office"],
"states": ["CA", "NY"],
"fetchBrokers": True,
"maxResults": 500,
})
leads = []
for i in client.dataset(run["defaultDatasetId"]).iterate_items():
if i.get("brokerNames"):
leads.append({
"broker": i.get("brokerNames"),
"brokerage": i.get("brokerageName"),
"website": i.get("brokerageWebsite"),
"listing": i.get("name"),
"city": i.get("city"),
"state": i.get("state"),
})
print(f"{len(leads)} broker leads")import pandas as pd
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("logiover/crexi-scraper").call(run_input={
"propertyTypes": ["Multifamily"],
"keyword": "Austin",
"maxResults": 1000,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
df = pd.DataFrame(rows)
df.to_csv("crexi.csv", index=False)
print(df[["name", "askingPrice", "capRate", "city", "state"]].head())run = client.actor("logiover/crexi-scraper").call(run_input={
"searchUrls": ["https://www.crexi.com/properties/california/office-commercial-real-estate"],
"maxResults": 0, # no limit
})See also: CLI · API / cURL · JavaScript.