# Send meeting notes to Zapier, n8n, Make or any app you already use

> For freelance developers and consultants who already run one client through Notion and another through a spreadsheet: how TrackHeros posts a finished Google Meet or Microsoft Teams meeting — summary, decisions, action items and attendees — to a web address you choose. One webhook per client, off until you turn it on, signed so the other end can check it came from us, and a log showing what arrived.

Canonical: https://trackheros.com/blog/send-meeting-notes-to-any-app/  
Updated: 2026-09-06

Most meeting tools answer "do you integrate with X?" with a list. This is the
other answer: one webhook, and X is whatever you already use.

When a meeting finishes processing, TrackHeros can post it as JSON to an
address you choose. That address can be a Zapier Catch Hook, an n8n Webhook
node, a Make custom webhook, or something you wrote yourself. Between the first
three, that reaches most of the tools a freelance developer runs a client on.

It is set up **per client**. Each one has its own address, its own switch and
its own log. Client A's meetings cannot fire client B's webhook, and there is
no account-wide setting that would let them.

## What arrives

One JSON object per meeting, with a `version` field so it stays stable:

```json
{
    "version": "1.0",
    "event": "meeting.completed",
    "meeting": {
        "title": "Project sync",
        "started_at": "2026-09-04T16:35:00+03:00",
        "duration_minutes": 35,
        "platform": "google_meet",
        "client_workspace": { "name": "Client A" }
    },
    "attendees": [{ "name": "Maya Robinson", "email": "maya@…" }],
    "summary": "…",
    "decisions": [{ "text": "Ship on Friday" }],
    "action_items": [
        {
            "action": "Fix the join retry",
            "owner": "Maya",
            "owner_email": "maya@…",
            "due": "Monday"
        }
    ],
    "topics": [{ "title": "Access control", "points": ["…"] }],
    "links": { "dashboard": "https://…", "minutes_pdf": "https://…" }
}
```

Two fields are worth reading carefully before you build on them.

`owner_email` is filled in only when an action item's owner matches exactly one
person on the calendar invitation. If two people in the room could be "Sam", it
stays empty. That is deliberate: an empty field is a prompt for a human, and a
guessed one is a task somebody else now believes they own.

`guest_list_partial` is `true` when the meeting platform hid the guest list, so
the attendee list is a subset rather than the whole room.

## Set it up with Zapier

1. In Zapier: **Create Zap → Webhooks by Zapier → Catch Hook**. Copy the custom
   webhook URL it gives you.
2. In TrackHeros: **Destinations**, choose the client, paste the URL into the
   Webhook card, save, and turn the switch on.
3. Press **Send a test**. This posts your most recent meeting immediately, so
   Zapier's "Test trigger" has real data to build its field mapping from —
   rather than you waiting for the next meeting to end.
4. Add whatever action you want. `action_items` is a list, so use Zapier's
   line-item handling or a Looping step if you want one task per item.

## Set it up with n8n

1. Add a **Webhook** node, method `POST`, and copy the **production** URL — the
   test URL only listens while the editor is open.
2. Paste it into TrackHeros, save, turn it on, and press **Send a test**.
3. To check the signature: a **Crypto** node (HMAC, SHA256, hex) over the raw
   body, compared with the `x-trackheros-signature` header in an **IF** node.
   Turn on the Webhook node's **Raw Body** option — a re-serialised body will
   not match, because the signature covers the exact bytes we sent.

## Set it up with Make

1. Add a **Webhooks → Custom webhook** module, press **Add**, and copy the
   address.
2. Paste it into TrackHeros and press **Send a test** while Make is listening,
   so it can work out the data structure.
3. `action_items` and `topics` arrive as arrays — use an **Iterator** to handle
   each one.

## Signing, so the other end can trust it

A public URL will accept JSON from anyone. Create a signing key on the
destination and TrackHeros signs every request with it. Your endpoint
recomputes the same HMAC-SHA256 over the body it received and compares:

```python
import hashlib, hmac

expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, request.headers["X-TrackHeros-Signature"])
```

Compute it over the raw bytes, and compare in constant time. The key is shown
once when you create it and never again — replace it if you lose it.

## When it goes wrong, you can see it

A webhook that quietly stops working is worse than no webhook, because you
carry on assuming the notes arrived. Every delivery is in a log on the same
page: when it went, where, whether it worked, and on a failure the status code
and whatever your endpoint said back. A failed one has a **Try again** button
once you have fixed it.

We try three times with a growing gap. A server error or a timeout is worth
retrying; a "this request is wrong" answer is not, because it will be just as
wrong in thirty seconds and a retry would only risk sending it twice.

## What we will not do

The address has to be **https**, and it has to be publicly reachable — a URL
pointing at a private or internal address is refused when you save it. We do
not follow redirects, so give us the final URL.

And a meeting is sent **once** per destination. Some meetings are summarised
twice, once from the live captions and again from the recording; the second
pass improves the text but does not fire the webhook again.

## The links, and what they mean

`links.minutes_pdf` and `links.transcript` are temporary addresses your
automation can fetch the documents from. They expire, and while they are valid
anyone holding the URL can open that one document — so they are a switch you
can turn off if your automation stores its inputs somewhere you would rather
they did not sit.

`links.dashboard` needs a sign-in, so it is safe to paste anywhere.

## Already-connected tools

If your client is on Slack, Google Drive or Jira, TrackHeros talks to those
directly and a webhook is not the best route: the minutes can be filed as a
Google Doc, action items direct-messaged to the people who own them, or filed
as issues in a project you pick. Those are on the same Destinations page. The
webhook is for everything else.

## Not yet available

- A published Zapier app you install from the Zapier directory — not yet available
- Filters and conditions on which meetings are sent — not yet available

## Frequently asked

**Do you integrate with Notion, Airtable, HubSpot or Trello?**

Through a webhook, yes. TrackHeros sends each finished meeting to a web address you choose, and Zapier, n8n and Make all accept one and can write to those tools. There is no dedicated Notion or Airtable connection in TrackHeros itself, and the webhook is how that gap is covered.

**Is the webhook set per client or for my whole account?**

Per client. Each client has its own address, its own switch and its own log, and one client cannot fire another one. That is the same rule the rest of the product follows: a client is a wall, not a folder.

**What happens if my endpoint is down?**

We try three times with a growing gap between attempts. If it still fails, the delivery is marked failed in your log with the status code and whatever your endpoint said back, so you can see why rather than wonder. You can fix the endpoint and press Try again.

**How does my endpoint know the meeting really came from TrackHeros?**

Create a signing key on the destination and we sign every request with it, in an X-TrackHeros-Signature header. Your endpoint recomputes the same signature over the body it received and compares. Anyone can post JSON at a public URL; the signature is what tells you which posts to trust.

**Will the same meeting be sent twice?**

No. A meeting is sent once per destination. We summarise some meetings twice — once from the live captions and again from the recording, which is what handles mixed Arabic and English — and the second pass does not fire the webhook again, because a second copy would already be a second task in whatever it feeds.

---

TrackHeros is in private beta. Early access: https://trackheros.com/#early-access
