Skip to content

BlogGuides

Send Discord Applications to Google Sheets, Trello or Your Own Server

Mico's webhook sends each application and decision as signed JSON to a URL you control. How to get it into a sheet or board, and what happens when you are down.

Mico Team, Mico

6 min read

Discord is a good place to review applications and a poor place to keep them. Messages scroll away, there is no way to sort by score, and the answers end up in a channel nobody can search properly. Sooner or later someone asks for "a spreadsheet of everyone who applied".

The panel webhook is how you get applications out of Discord and into your own tools.

What does the application webhook send, and when?

You give a panel one https:// address. Mico sends a POST to it on three events:

The events

application.submitted
An application was sent, after the AI scored it (or could not) and the review message was posted
application.accepted
A reviewer, or the AI's automatic decision, accepted it
application.denied
A reviewer, or the AI's automatic decision, denied it

Each event can be switched off on its own. If you only want accepted people in your sheet, turn the other two off.

The body is JSON. A sent application looks like this, shortened:

{
  "event": "application.submitted",
  "timestamp": "2026-10-13T18:40:12.345678+00:00",
  "application": {
    "id": 1234,
    "user_id": 111111111111111111,
    "panel_name": "Staff applications",
    "quality_score": 82,
    "ai_detection_score": 9,
    "ai_reasoning": "Clear, specific answers ...",
    "auto_decision": "none",
    "answers": [
      { "question": "Why do you want to join?", "answer": "Because ...", "is_identifier": false }
    ]
  }
}

A few things worth knowing:

  • The answers only come on application.submitted. Accept and deny carry who decided, whether it was automatic, and the reviewer's note. Match them to the first event by application.id.
  • The scores can be empty. If the panel does not use the AI, or the server used up its AI scores for the month, the three AI fields are null.
  • Discord IDs are big numbers. Some tools round them. Store them as text.

The full list of fields and headers is on the panel webhooks docs page.

How do I set up the webhook on a panel?

Open the panel, in the dashboard or with /panel, and go to Messages and after a decision. Under Webhook, enter:

  1. The address (https://...), the final one: Mico does not follow redirects
  2. Optionally, an authorization value. Mico sends it with every request, so your receiver can refuse anything without it.

Then press Send a test. A test has "test": true and no application id, so your receiver can tell it apart. The result appears in the panel's delivery log, which keeps every delivery for 30 days with its status and the last error.

Can I post applications into another Discord channel?

Yes, and it is the simplest use. Paste a Discord webhook address (the kind Discord gives you under a channel's Integrations) and Mico sends a short embed there instead of the JSON.

People use this for a log channel in a separate staff server, or a channel where leadership sees accepted applications without seeing the review queue. No receiver to build.

How do I send Discord applications to Google Sheets or Trello?

Here is the honest part. Mico does not connect to Google Sheets or Trello itself. It sends JSON to an address. A spreadsheet or a board does not have an address that accepts that JSON and does the right thing with it.

So you need a small relay in the middle:

  1. Application sent
  2. Mico POSTs JSON
  3. Your relay
  4. New row or card

The relay can be:

  • An automation service you already use that can receive a webhook and add a row to a sheet or a card to a board. Most of them have a "catch a webhook" trigger. You map application.answers to columns.
  • A small script of your own, on a server or a serverless function, that receives the request, checks it, and calls the sheet's or board's own API.

Whichever you pick, set it up so that:

A relay that will not break

  • It answers with a 2xx status itself, within 10 seconds
  • It does not answer with a redirect: Mico counts that as failed, even if the row was written
  • It checks the auth value or the signature before writing anything
  • It ignores a repeat of the same delivery (see below)
  • It stores Discord IDs as text

The redirect point catches people. Some hosted scripts do their work and then answer with a redirect. The row appears, Mico marks the delivery failed, and after 10 of those in a row the webhook switches itself off. Check the delivery log after your first test.

How do I check a request really came from Mico?

Every delivery has an X-Mico-Signature header that looks like t=1760380812,v1=5f2c.... It is an HMAC-SHA256 made with the webhook's own signing secret (it starts with whsec_), which you find in the panel's webhook settings, or under Deliveries and secret in /panel.

To check a request:

  1. Read the raw body, before parsing it as JSON
  2. Compute HMAC-SHA256 with your secret over t, a dot, and the raw body
  3. Compare it with v1, and refuse a t more than 5 minutes from your clock

The docs page has copy-paste code for Python and Node. If your automation service cannot compute an HMAC, use the authorization value instead: it is a shared secret only you and Mico know.

You can replace the signing secret at any time. The old one stops working at once, so update your receiver straight away.

A Discord webhook address gets no signature: Discord would not check it anyway.

What happens when my endpoint is down?

Mico sends webhooks in the background, so a slow or broken receiver never holds up an application or a decision. Your reviewers will not notice.

What your server doesWhat Mico does
Answers 2xxDelivered. Done.
No answer, timeout, 408, 425, 429 or any 5xxTries again after 30 s, 2 min, 10 min, 30 min and 2 h (six tries in all)
Sends a Retry-After headerWaits that long, up to an hour
Answers another 4xx, or a redirectMarked failed at once, no retry
10 deliveries in a row failWebhook switched off, the server owner gets a DM

Once switched off, anything still waiting is not sent. Saving the webhook again, or pressing Turn on, starts it again for new events.

Because of retries, the same event can arrive twice: for example, your server wrote the row but answered too late. Use the X-Mico-Delivery header, which is the same on every try of one delivery, or the pair of application.id and event, to skip a repeat.

Can I export Discord applications without a webhook?

The webhook only sends what happens after you set it up. For what is already there:

  • Each review message has the full application attached as a text file.
  • The dashboard's applications list can be exported for a one-off copy.

How long the answers are kept depends on the plan (see pricing). After that, only the record stays: status, scores and dates. If you need answers for longer, the webhook into your own storage is the reliable way to keep them.

Where the webhook is the wrong tool

Good fit

  • Keeping every application in a sheet or database you control
  • Creating a card or task when someone is accepted
  • Posting accepted people into a channel in another server
  • Feeding your own bot or game server script

Not the right call

  • No built-in Google Sheets, Trello or other connection: you need a relay
  • Not two-way: you cannot accept or deny by editing the sheet
  • Does not write to a game server's whitelist for you; your script must do that
  • Not on the free plan

If your goal is a game server whitelist, the webhook on accept is one of two ways to bridge it, and the whitelist application guide covers both. For recruitment rounds where you track tryouts across several teams, see the recruitment bot guide.

Frequently asked questions

No. Mico has no built-in Google Sheets or Trello connection. It sends each event as JSON to a web address you choose. To get a row in a sheet or a card on a board, you need something at that address that receives the request and adds the row or card: an automation service you already use, or a small script of your own.

On three events: an application was sent (after the AI score and the review message), an application was accepted, and an application was denied. Each can be switched off on its own. Decisions made automatically by the AI count too.

Every delivery carries an X-Mico-Signature header. It is made with the webhook's own signing secret, which you find in the panel's webhook settings. Your server recomputes the signature from the raw body and compares. You can also set an auth header value that Mico sends with every request.

Mico tries again: after 30 seconds, 2 minutes, 10 minutes, 30 minutes and 2 hours, six tries in all. After 10 deliveries in a row fail completely, the webhook switches itself off and the server owner gets a DM. Saving the webhook again or pressing Turn on starts it again.

Yes. Paste a Discord webhook address and Mico posts a short embed there instead of the JSON body. That suits a log channel in another server. A Discord webhook gets no signature, because Discord does not check one.

The webhook comes with the paid plans. The pricing page lists which ones and what else each includes.

See it on your own server.

Add Mico free, run /setup, and the next application arrives scored, in its own review channel.

Free plan, unlimited applications. New servers get Premium free for 14 days with their first posted panel. No card.