Call the Crexi Scraper from Node.js with the official apify-client. This talks to the hosted Actor — no scraper code lives in your project.
npm install apify-clientimport { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('logiover/crexi-scraper').call({
propertyTypes: ['Retail'],
states: ['TX'],
fetchDetails: true,
fetchBrokers: true,
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} commercial listings`);
console.log(items[0]);import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('logiover/crexi-scraper').call({
propertyTypes: ['Office'],
states: ['CA', 'NY'],
fetchBrokers: true,
maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const leads = items
.filter((i) => i.brokerNames)
.map((i) => ({
broker: i.brokerNames,
brokerage: i.brokerageName,
website: i.brokerageWebsite,
listing: i.name,
city: i.city,
state: i.state,
}));
console.table(leads);const run = await client.actor('logiover/crexi-scraper').call({
searchUrls: ['https://www.crexi.com/properties/texas/retail-commercial-real-estate'],
maxResults: 0, // no limit
});let offset = 0;
const limit = 1000;
while (true) {
const { items } = await client
.dataset(run.defaultDatasetId)
.listItems({ offset, limit });
if (items.length === 0) break;
// process items...
offset += items.length;
}See also: CLI · API / cURL · Python.