Help / Zapier and Make
Zapier and Make
Send DealWolf's deals, offers, saved-search matches and packs into your CRM, spreadsheet, Slack or anything else Zapier, Make or n8n can reach, and add leads to DealWolf from your forms. Everything stays inside your own workspace. DealWolf never contacts a seller, agent, buyer or investor, and its events carry no contact details, no listing-site names and no MAO or walk-away, so a Zap can't pass them on. The full detail is in API and webhooks and the OpenAPI spec.
1. Connect
The workspace owner makes a key on the API and webhooks page, named after the tool (for example "Zapier"):
- Read (Read only: deals, buyers and events) is enough for polling triggers.
- Read and write (Read and write: also add leads and subscribe webhooks) is needed for instant triggers and the Add a lead action.
In Zapier or Make, use API key (bearer) authentication: the header is Authorization: Bearer dwk_…. To test the connection, call GET /api/v1/me: it answers with the key's name, its scopes, your workspace's name and the limits.
curl -s "$DEALWOLF_URL/api/v1/me" -H "Authorization: Bearer $DEALWOLF_KEY"2. Triggers
| Trigger | Event | When it fires | Polling address |
|---|---|---|---|
| New Deal | deal.created | A deal or lead was added to the workspace: by hand, from the map, a bulk stack, the seller form or the API. Carries the deal (no seller or agent contact details). | GET /api/v1/events?type=deal.created |
| Deal Status Changed | deal.stage_changed | A deal moved to another pipeline stage (by hand, in bulk, or when a pack moved it to Packed). Carries the deal and the stage it came from. | GET /api/v1/events?type=deal.stage_changed |
| Offer Status Changed | offer.status_changed | An offer in the offer tracker changed status: countered, accepted, rejected, dead or withdrawn. Carries the offer's status before and after, its amount and the last counter. The MAO, walk-away floor and who it went to are never sent. | GET /api/v1/events?type=offer.status_changed |
| New Lead Match | lead.matched | A saved search (buy box) found new homes that match it. Carries the saved search and up to ten homes (address, price, beds, type, map position, whether it scores strong). Which listing site a home came from is never sent. | GET /api/v1/events?type=lead.matched |
| New Pack | pack.created | A deal pack was made for a deal, from a template or the pack builder. Carries the pack's name and file name, and the deal. A draft: nothing is sent to an investor. | GET /api/v1/events?type=pack.created |
Each trigger can be set up in either of two ways.
Instant (REST hooks, recommended). When the Zap or scenario is switched on, it subscribes its own address; when it is switched off, it unsubscribes. It needs a read-and-write key.
curl -s -X POST "$DEALWOLF_URL/api/v1/webhooks" \
-H "Authorization: Bearer $DEALWOLF_KEY" \
-H "Content-Type: application/json" \
-d '{ "target_url": "{{bundle.targetUrl}}", "event": "deal.created" }'
# 201: { "data": { "id": "…", "url": "…", "events": ["deal.created"], "secret": "whsec_…" } }curl -s -X DELETE "$DEALWOLF_URL/api/v1/webhooks/{{bundle.subscribeData.data.id}}" \
-H "Authorization: Bearer $DEALWOLF_KEY"Keep the id from the subscribe answer for the unsubscribe. If the tool answers a delivery with 410 Gone, DealWolf stops and removes the subscription by itself. Up to 5 addresses per workspace.
Polling. Zapier or Make asks every few minutes for the newest events of one type. It needs only a read key. Events are newest first and each has a stable id (evt_…), which Zapier de-duplicates on.
curl -s "$DEALWOLF_URL/api/v1/events?type=deal.created&limit=25" \
-H "Authorization: Bearer $DEALWOLF_KEY"Samples. To map fields before anything has happened, use the made-up example of each event (Zapier's performList for an instant trigger):
curl -s "$DEALWOLF_URL/api/v1/events/samples?type=offer.status_changed" \
-H "Authorization: Bearer $DEALWOLF_KEY"Every trigger, instant or polled, gives the same JSON: id, type, api_version, created_at and data (the deal, offer, saved search or pack).
3. Actions
- Add a lead:
POST /api/v1/dealswith a title or an address, and optionally postcode or ZIP, asking price, bedrooms and a contact. SendIdempotency-Keywith the tool's own record id so a retried Zap never adds the lead twice. - Find a deal:
GET /api/v1/deals/{id}, or list withstage,marketandstrategy. - List buyers:
GET /api/v1/buyers(names and buy boxes only).
4. Make (and n8n)
The simplest way: add a Webhooks › Custom webhook module in Make (or a Webhook node in n8n), copy its address, and add it on the API and webhooks page with the events you want. Press Send a test there so Make learns the shape. For actions, use Make's HTTP › Make a request module with the bearer header above; lists follow the Link: rel="next" header or next_cursor for the next page.
5. Good to know
- Each key has its own per-minute limit and monthly quota; every answer says what is left (
RateLimit-Remaining). A workspace's keys also share one per-minute limit. - A delivery that fails is tried again for about eight hours. The delivery log on the API page shows each try.
- Deliveries can arrive twice or out of order; use the event
idto ignore repeats. - Revoking a key stops it at once and switches off the subscriptions it made.
- Webhooks are signed (
DealWolf-Signature); Zapier and Make don't check signatures, but your own receiver should (see how).