# Zapier, Make, Python and JavaScript recipes

Every CyberMax tool is one HTTPS call: `POST https://api.apify.com/v2/acts/cybermax~<tool>/run-sync-get-dataset-items` with your JSON input as the body and `Authorization: Bearer YOUR_APIFY_TOKEN`. The response is a JSON array, one object per result. Calls wait up to 300 s; add `?timeout=120` to cap a run and `&maxTotalChargeUsd=0.50` to cap spend.

## Endpoints and minimal inputs

| Tool | Endpoint | Minimal body |
|---|---|---|
| [Gripeline](https://apify.com/cybermax/app-reviews) | `https://api.apify.com/v2/acts/cybermax~app-reviews/run-sync-get-dataset-items` | `{"apps":["Duolingo"],"maxReviewsPerApp":5}` |
| [HireHeat Jobs](https://apify.com/cybermax/career-site-jobs) | `https://api.apify.com/v2/acts/cybermax~career-site-jobs/run-sync-get-dataset-items` | `{"keywords":["engineer"],"maxJobs":3,"companyNames":["vercel"]}` |
| [Linkheft](https://apify.com/cybermax/domain-authority) | `https://api.apify.com/v2/acts/cybermax~domain-authority/run-sync-get-dataset-items` | `{"domains":["stripe.com","notion.so","hubspot.com","anthropic.com"]}` |
| [DomainDNA](https://apify.com/cybermax/domain-intel) | `https://api.apify.com/v2/acts/cybermax~domain-intel/run-sync-get-dataset-items` | `{"domains":["apify.com","stripe.com"]}` |
| [Swellmeter](https://apify.com/cybermax/google-trends) | `https://api.apify.com/v2/acts/cybermax~google-trends/run-sync-get-dataset-items` | `{"keywords":["chatgpt","claude"],"proxyConfiguration":{"useApifyProxy":true}}` |
| [HireHeat](https://apify.com/cybermax/hiring-signals) | `https://api.apify.com/v2/acts/cybermax~hiring-signals/run-sync-get-dataset-items` | `{"companies":["vercel.com"]}` |
| [Keyfern](https://apify.com/cybermax/keyword-ideas) | `https://api.apify.com/v2/acts/cybermax~keyword-ideas/run-sync-get-dataset-items` | `{"seeds":["standing desk"],"maxIdeasPerSeed":8,"trendCheckTop":0,"proxyConfiguration":{"useApifyProxy":true}}` |
| [Insidewell](https://apify.com/cybermax/sec-insider-tracker) | `https://api.apify.com/v2/acts/cybermax~sec-insider-tracker/run-sync-get-dataset-items` | `{"maxItems":5,"maxTransactions":2,"tickers":["AAPL","NVDA"]}` |
| [Hollerdex](https://apify.com/cybermax/website-contacts) | `https://api.apify.com/v2/acts/cybermax~website-contacts/run-sync-get-dataset-items` | `{"domains":["apify.com","basecamp.com"]}` |
| [Capturewren](https://apify.com/cybermax/website-screenshot) | `https://api.apify.com/v2/acts/cybermax~website-screenshot/run-sync-get-dataset-items` | `{"urls":["https://apify.com","https://example.com"]}` |

## Zapier (Webhooks by Zapier)

1. Create a Zap with any trigger (e.g. **Google Sheets → New Spreadsheet Row** with a `domain` column).
2. Add an action: **Webhooks by Zapier → Custom Request**.
3. Method **POST**. URL `https://api.apify.com/v2/acts/cybermax~website-contacts/run-sync-get-dataset-items?timeout=120`.
4. Data: `{"domains": ["{{domain}}"]}` (map the column from step 1). Data Pass-Through: false.
5. Headers: `Authorization` = `Bearer YOUR_APIFY_TOKEN`, `Content-Type` = `application/json`.
6. Test. Zapier returns the array's fields (e.g. `primaryEmail`, `primaryPhone`, `socials`). Add **Google Sheets → Update Spreadsheet Row** to write them back.

Tip: Zapier's own timeout is shorter than 300 s, so keep one item per call, or use the async `/runs` endpoint plus Apify's webhook to a "Catch Hook" trigger for big lists.

## Make (HTTP module)

1. New scenario, first module = your source (Google Sheets **Search Rows**, Airtable, Webhook...).
2. Add **HTTP → Make a request**.
3. URL `https://api.apify.com/v2/acts/cybermax~website-contacts/run-sync-get-dataset-items`, Method **POST**.
4. Headers: `Authorization` = `Bearer YOUR_APIFY_TOKEN`.
5. Query string: `timeout` = `120`.
6. Body type **Raw**, Content type **JSON (application/json)**, Request content: `{"domains": ["{{1.domain}}"]}`.
7. Tick **Parse response**. Add an **Iterator** on the array and map the fields into the next module.

(Make and Zapier also have native Apify apps: choose "Run an Actor", Actor `cybermax/<tool>`, and paste the same JSON input.)

## Python

```python
import os, requests

def cybermax(tool: str, payload: dict, timeout: int = 120) -> list[dict]:
    r = requests.post(
        f"https://api.apify.com/v2/acts/cybermax~{tool}/run-sync-get-dataset-items",
        params={"timeout": timeout},
        headers={"Authorization": f"Bearer {os.environ['APIFY_TOKEN']}"},
        json=payload,
        timeout=timeout + 30,
    )
    r.raise_for_status()
    return r.json()

for row in cybermax("website-contacts", {"domains":["apify.com","basecamp.com"]}):
    print(row.get("domain"), row.get("primaryEmail"))
```

Or with the official client (`pip install apify-client`): `ApifyClient(token).actor("cybermax/website-contacts").call(run_input=...)` then `.dataset(run["defaultDatasetId"]).iterate_items()`.

## JavaScript (Node 18+, browsers, Deno, Bun)

```js
async function cybermax(tool, input, timeout = 120) {
  const res = await fetch(
    `https://api.apify.com/v2/acts/cybermax~${tool}/run-sync-get-dataset-items?timeout=${timeout}`,
    {
      method: 'POST',
      headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}`, 'Content-Type': 'application/json' },
      body: JSON.stringify(input),
    },
  );
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  return res.json();
}

const rows = await cybermax('website-contacts', {"domains":["apify.com","basecamp.com"]});
console.table(rows.map((r) => ({ domain: r.domain, email: r.primaryEmail })));
```

Or with the official client (`npm i apify-client`): `await new ApifyClient({ token }).actor('cybermax/website-contacts').call(input)`.

## n8n

Import any file from `recipes/n8n/` (Workflows → Import from File). Each workflow is Manual Trigger → HTTP Request; replace `YOUR_APIFY_TOKEN` in the Authorization header. Two chained recipes show multi-tool flows: `chain-contacts-then-tech-stack.json` and `chain-hiring-then-contacts.json`.

© 2026 CyberMax. MIT licence.
