A Make custom app for looot: one key and one prepaid balance for 2,500+ data endpoints from 90+ providers. A scenario can find a work email, verify it, enrich a company, or run any other endpoint in the catalog. You see the price before a run and a failed call costs nothing.
Status: source only. The files pass Make's own JSON schemas, but the app has not been created in a Make account or run in a scenario yet. See "Not checked yet" before you rely on it.
src/ holds the app in the layout the Make Apps SDK for VS Code uses for local development: one
makecomapp.json manifest, the base, one connection and ten modules, 59 files.
| Module | Type | REST route | Cost |
|---|---|---|---|
| Find a work email | action | POST /v1/runs with job:people.email.find |
from $0.003598 per call |
| Verify an email | action | POST /v1/runs with job:people.email.verify |
from $0.00145 per call |
| Enrich a company | action | POST /v1/runs with job:company.enrich |
from $0.0019 per call |
| Run an operation | action | POST /v1/runs with any endpoint or job:<id> |
the endpoint's price |
| Search operations | search | GET /v1/catalog/search?q= |
free |
| Get an operation | action | GET /v1/operations/{endpointId} |
free |
| Get a run | action | GET /v1/runs/{runId} |
free |
| Get the balance | action | GET /v1/balance |
free |
| Watch finished runs | polling trigger | GET /v1/runs?limit=50 |
free |
| Make an API call | universal | any path under https://api.looot.ai |
depends on the call |
Prices are the cheapest provider of each job in the public catalog
(GET https://api.looot.ai/v1/catalog/overview?depth=jobs) on 2026-10-08. They change; Search operations
returns the live price.
API key. One field, Agent token, created in the looot dashboard under Settings, Agent tokens, with
catalog.read, runs.read, runs.execute and usage.read. The connection test calls GET /v1/balance
and stores the workspace id as the connection's label. The base sends Authorization: Bearer <token> and
masks that header in Make's logs.
- Body.
{"endpointId", "input", "idempotencyKey", "wait", "fallback"}, the same body the looot n8n node sends. - Try other providers is on by default and sends
fallback: true. With Max cost (USD) filled it sends{"enabled": true, "maxCostUsd": <n>}. looot tries the next provider of the same job when the first finds nothing and charges only the attempts that ran. - Wait (seconds) defaults to 20 and stops at 30, under Make's 40 second module limit. A run that
takes longer comes back
queuedorrunning. Read it with Get a run, or start a second scenario from Watch finished runs. - Idempotency key. Empty by default. The module then sends
make-plus the SHA-256 of the endpoint, the module's input and the UTC date. Running the same lookup again on the same day replays the first run and pays once. Fill the field to use your own key. - Output.
runId,status,actualCost, the provider's rawresultand looot's normalized output. Find a work email addsemailandcheck. Verify an email addsemailStatusanddeliverable. Enrich a company addscompanyName,companyDomain,industryandsize. These are empty when the provider that answered has no field map;resultis always there. - Errors. looot answers HTTP 201 even when a run failed before it started, so each run module marks a
response with status
failed,blockedorstoppedas invalid and shows looot's error code and message. HTTP 402 shows the top-up link.
Make has no file upload for custom apps. There are two ways in. Both need a Make account and a Make API
token with the sdk-apps:read and sdk-apps:write scopes (Make profile, API access).
git clone https://github.com/loootai/looot-make && cd looot-make
node scripts/import.mjs # dry run: prints the 68 calls, sends nothing
MAKE_API_TOKEN=<token> MAKE_ZONE=eu1.make.com node scripts/import.mjs --applyMAKE_ZONE is the host you see in the browser when you use Make (eu1.make.com, eu2.make.com,
us1.make.com, us2.make.com). The script creates the app, the connection and the ten modules through
/api/v2/sdk/apps, then uploads each code file. It stops at the first call Make refuses and prints
Make's answer. To load the files into an app that already exists, add --app <app name>.
- Install the Make Apps SDK extension and add your API token to it.
- In the Make web app, create a custom app named looot.
- Open this repo in VS Code. In
src/makecomapp.json, add your app toorigins:{ "label": "looot", "baseUrl": "https://eu1.make.com/api", "appId": "<your app name>", "appVersion": 1, "apikeyFile": "../.secrets/apikey" } - Right-click
makecomapp.jsonand pick Deploy to Make. The extension asks how to pair each local component the first time; choose to create it.
Then upload assets/icon-512.png as the app logo, create a connection with a looot token, and run each
module once in a test scenario.
Nothing here has run on Make. What the tests cover is the file structure. The first live scenario should confirm these, in this order:
- The IML expressions for the idempotency key and the fallback object evaluate as written
(
sha256,createJSON,parseJSON,formatDateandifemptyare documented built-in functions). - Make leaves an empty optional field out of the JSON body. If it sends
nullfor an empty First name, looot may refuse the input. - Watch finished runs picks up a run that finishes after the scenario last polled.
- The import script against the real API. It follows the documented routes and the calls the VS Code extension makes, and it is tested against a local stand-in for Make's API only.
npm ci --ignore-scripts
npm testnpm test downloads Make's JSON schemas for custom app files from the Make Apps SDK for VS Code
(integromat/vscode-apps-sdk, pinned to commit 6ff5f3d) into .cache/, then checks every file in
src/ against the schema for its type, checks Make's naming rules, and runs the import script against a
local HTTP server. No test calls looot or Make. Output on 2026-10-08, Node 24.18.0:
ℹ tests 17
ℹ pass 17
ℹ fail 0
Make reviews an app before it is public. Docs read on 2026-10-08: https://developers.make.com/custom-apps-documentation/app-review/prerequisites and https://developers.make.com/custom-apps-documentation/app-review/request-app-review.
- Run every module in a test scenario and keep those scenarios; Make asks for them.
- In the app's page click Publish, then switch each module to visible. A published app cannot be unpublished and its modules cannot be deleted.
- Request the review from the same page.
- After approval, apply to the technology partner program at https://www.make.com/en/technology-partners.
Read on 2026-10-08:
- App structure: https://developers.make.com/custom-apps-documentation/app-components/base
- API key connection: https://developers.make.com/custom-apps-documentation/app-components/connections/basic-connection
- Modules: https://developers.make.com/custom-apps-documentation/app-components/modules
- Universal module: https://developers.make.com/custom-apps-documentation/app-components/modules/universal-module/rest
- Naming: https://developers.make.com/custom-apps-documentation/best-practices/naming-conventions/modules/module-labels
- Local development layout: https://developers.make.com/custom-apps-documentation/get-started/make-apps-editor/apps-sdk/local-development-for-apps
- API: https://developers.make.com/api-documentation/api-reference/sdk-apps
- looot-zapier, n8n-nodes-looot, looot-activepieces: the same operations on other automation tools.
- looot-mcp: the remote MCP server,
claude mcp add --transport http looot https://api.looot.ai/mcp. - awesome-gtm: open-source GTM tools.
MIT, copyright looot.
