How to Build a
Grok Bot That Sends Your Weekly Report for You, With Your Approval
60 min, plus one supervised week (two Fridays)
Before this: How to Build a Grok Bot That Writes Your Weekly Report From a Google Sheet
Next: How to Build an AI Team With Grok Bot: a Chief of Staff and 3 Specialist Bots
Every Friday at 3 PM, the Bot reads your Sheet, writes the report, drafts the team email or Slack post, and pings you. One message from you ("send it"), one tap on the card, and it goes out. Nothing leaves without your OK.
Checked October 17, 2026. Researched and drafted with help from
Grok Bot, one of the agents covered.
Why build this
In I2 you built a Bot that writes your weekly report. You still had to copy it into an email, add the right people, fix the subject line and send it.
This upgrade does that last mile. The Bot turns the report into a ready-to-send email (or a Slack post), addressed to the right people, in your voice. It stops right before sending.
Why it's Advanced: this Bot sends messages to other people. A wrong number in front of your boss or a client is worse than a wrong number in a file only you see. So the design keeps you in the loop on every send, and it plans around how
Grok Bot handles approvals during routines.
What you'll build
FRIDAY 3:00 PM (routine)
STEP 1 Read this week's numbers (Drive/Sheets, read only)
STEP 2 Run the math check (calculate with code, list the rows used)
STEP 3 Write the report file (/workspace/weekly-reports/)
STEP 4 Draft the message:
- Gmail: saved as a draft to your team list, or
- Slack: draft text shown in chat
STEP 5 Ping you: "Report ready. Reply 'send' or tell me what to change."
|
v
YOU (any time Friday)
STEP 6 Read the draft -> "send it" -> approval card -> Allow once -> sent
The key design choice: the routine prepares, and you trigger the send in a live chat.
Grok Bot approvals that come from a routine expire after about 10 minutes. Approvals in a chat you're in wait for you. So we never ask the routine to send.
Who it's for
- Team leads who owe a Friday update.
- Agency owners who report numbers to clients every week.
- Small-business owners who update a partner or investor.
- You've built I2: Weekly report from a Google Sheet, and it's been right at least two Fridays in a row.
What you'll need
Grok Bot on The X Subscription Premium ($30/month) or higher, or a paid Cursor plan, or a linked older SuperGrok subscription.
Grok Bot isn't included in the Free or Plus plans. (Plans checked Oct 17, 2026.)- Your Report Writer Bot and its "Weekly report from Sheet" skill from I2.
- Gmail plugin (for an email update) and/or Slack plugin (for a channel post).
- A short list of who gets the report: email addresses or one Slack channel.
What you'll get
- The full workflow with the "prepare, then you send" pattern.
- Safety rules for sending and posting.
- The email draft prompt and the Slack post prompt.
- A recipients allowlist, so it can never email the wrong person.
- A two-skill chain: "Weekly report" → "Weekly report: send pack".
- The Friday routine, plus a "nudge" routine if you forget to approve.
- A two-Friday supervised test, troubleshooting and variations.
Time
About 60 minutes to build. Then supervise two Fridays before you rely on it.
At a glance
| Item | Details |
|---|---|
| Apps | Drive + Sheets (read) · Gmail (draft, then send after OK) · Slack (post as you after OK, optional) |
| Plan | |
| Risk level | Medium-high: messages go to other people. Mitigated by an allowlist, drafts first and approval in a live chat |
| Prerequisite | I2: Weekly report from a Google Sheet |
Quick questions
Will it send the report on its own? No. It prepares everything and waits. You say "send it" in chat, then confirm on the draft card (Send email) or approval card (Allow once).
Why not let the routine send it at 3 PM? Approvals that start from a routine expire after about 10 minutes, and we don't want sending to depend on that. You stay the last step.
Does the Slack post come from a bot account? No.
Grok Bot's Slack plugin posts as you, in channels you can post in. That's another reason to approve each post.
Can it attach the report file? Attaching a file to a Gmail draft through the plugin is not verified. This guide puts the report in the email body, which most people read anyway. Keep the file for your records.
What if a number is wrong after it's sent? Send a correction yourself. That's why the math check runs before every draft.
Before you start: 10-minute safety setup
- Ask first rules. Open Settings → General → Auto-review and make sure these exist:
Ask first before sending any email.Ask first before posting any Slack message.Ask first before editing, clearing, or deleting anything in Google Sheets or Google Drive.
- Never "Always allow" sending. When an approval card for an email or Slack post appears, always choose Allow once.
- Local computer off. Settings → General → Bot → Execution on Local Computer → Never allow.
- Time zone. Settings → General → Bot → Timezone.
- Notifications on for this Bot (Bot settings → Notifications), so you see "Report ready" on your phone.
Step 1: Add sending rules to the Bot
Open your Report Writer Bot → Edit Profile and add these lines to the end of its description:
Sending rules:
- I approve every send. Never send an email or post to Slack from a routine. Routines prepare drafts and tell me they're ready.
- Only send when I say "send" in this chat, and only to the allowlist below.
- Allowlist (email): [name@company.com], [name2@company.com]
- Allowlist (Slack): #[channel-name]
- Never add, remove or guess recipients. If someone asks to be added, tell me.
- Before any draft, run the math check. If a number can't be checked, put [CHECK] next to it and tell me.
- Never include files, links or data that aren't in the report.
Why an allowlist: a Bot can only email people you've written down. It can't "helpfully" CC someone it found in an old thread.
Step 2: Connect Gmail and/or Slack
- Connect apps → check Gmail is installed and signed in (from I1 or I2).
- For Slack: search Slack → Add → sign in to the right Slack workspace.
Know what these do (per
Grok Bot's help page):
- Gmail can draft and send in your one connected mailbox.
- Slack posts as the Slack user you connected, not as a separate bot, and only in channels you can post in. To use another Slack workspace, connect that workspace too.
- Plugins are account-wide: every Bot on your account can use them. The Ask first rules cover all your Bots.
Step 3: Build the "send pack" by hand
Run your I2 report first (type / and pick Weekly report from Sheet). When it's right, paste:
For email:
Turn this week's report into an email to my team.
To: only the email allowlist in your description.
Subject: "Weekly update: [week of Month D]"
Body:
- 2-sentence headline
- the metrics table (as a simple table)
- 3 wins, 3 risks (one line each)
- "Questions or corrections? Reply to this email."
- Sign off: "Thanks, [your name]"
Save it as a Gmail draft. Don't send it.
Then show me the full draft here: recipients, subject and body.
For Slack:
Turn this week's report into a Slack post for #[channel-name].
Format: a bold one-line headline, then 5 short bullets (top metrics with % change), then "Full report in thread or ask me."
Under 120 words. No @here or @channel.
Show me the draft text here. Don't post it.
Check the draft like a manager would:
- Are the recipients exactly your allowlist?
- Do the numbers match the report file?
- Is anything confidential in it that shouldn't go to this audience?
Now do the send step by hand, once:
Send the email draft now.
A draft card (Send email / Discard) or an approval card appears. Read the recipients and subject. Press Send email, or choose Allow once. For Slack, the same thing: Post the Slack draft to #[channel-name] now.
Tip: for your very first send, put only yourself on the allowlist. Check how the email looks in your inbox, then add your team.
Step 4: Chain it into a skill
Save a skill called "Weekly report: send pack".
It runs after "Weekly report from Sheet" and:
1. runs the math check and marks anything unverified with [CHECK]
2. saves a Gmail draft to the email allowlist (subject "Weekly update: [week of Month D]", format I approved)
3. writes the Slack draft text for #[channel-name] (format I approved) and shows it in chat
4. ends with: "Report ready. Reply 'send email', 'post slack', 'send both', or tell me what to change."
Rules: never send or post inside this skill. Never change recipients. If the Sheet has no data this week, say so and make no drafts.
Step 5: The Friday routine
Every Friday at 3:00 PM my time:
1. run the "Weekly report from Sheet" skill for this week
2. then run the "Weekly report: send pack" skill
3. post the drafts here and notify me
Never send or post from this routine. If the Sheet can't be opened or has no new rows, post "No report this week: [reason]" and stop.
Optional nudge (5+ minutes after any other routine):
Every Friday at 4:30 PM my time, if this week's report drafts haven't been sent yet, post one short reminder here: "Weekly report is still waiting for you." Don't send anything.
Test it: click the Bot's name → Details → Routines → pick the routine → Test. The test does real work. It will save a Gmail draft, but it won't send, because the skill never sends.
Step 6: Approving on Friday
When the notification arrives:
- Open the Bot's chat (desktop or phone).
- Read the drafts. Ask for changes in plain words:
Change risk #2 to say the dip was the holiday. Keep everything else. - Say
send email(orpost slack).
Grok Bot shows either an editable draft card (check the recipients and body, then choose Send email / Send message, or Discard) or an approval card (choose Allow once). Either way, read the recipients before you press anything.
Because you asked in a live chat, the approval waits for you. It doesn't expire the way routine approvals do.
On your phone: the same Bots and chats are in the
Grok Bot mobile app, and you can approve cards and send drafts there too (Send Email / Send Message, or Discard).
Your supervised two Fridays
- Numbers in the draft match the Sheet (check 2 yourself).
- Recipients match the allowlist exactly.
- Nothing was sent or posted before you said so.
- The "No report this week" path works (test with an empty week once).
- The tone fits your team.
What you may loosen afterward: nothing about sending. You can stop checking every number yourself once the math check has been clean for a month. Keep Allow once for every send, forever.
Make it yours: 3 variations
Client version (one email per client):
My Sheet has a "Client" column. Make one draft per client, each sent only to that client's address in this list: [Client A: a@x.com, Client B: b@y.com]. Never put two clients in one email.
Manager version (include next week's plan):
Add a section "Next week" with 3 priorities from the tab "Plan" in the same Sheet.
Month-end version: a second routine on the 1st of each month, same skills, comparing last month with the month before. Keep it at least 5 minutes away from other routines.
Safety settings recap
| Setting | Where | Choose |
|---|---|---|
| Ask first: email | Settings → General → Auto-review | Ask first before sending any email. |
| Ask first: Slack | Settings → General → Auto-review | Ask first before posting any Slack message. |
| Ask first: Sheets/Drive | Settings → General → Auto-review | Ask first before editing, clearing, or deleting anything in Google Sheets or Google Drive. |
| Approval cards for sending | In chat | Allow once only |
| Recipients | Bot description | Allowlist, never guessed |
| Notifications | Bot settings | On |
Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| Approval card says Expired | The send was started by a routine, not you | Don't send from routines. Say "send email" yourself in the chat |
| Draft went to the wrong Gmail account | You connected a different mailbox | Gmail connects one mailbox at a time. Reconnect the right one |
| Slack post failed | You're not in that channel, or it blocks posting | Join the channel, or pick one you can post in |
| Email looks messy in Outlook | Tables don't always survive | Use simple bullet lines instead of a table in the email. |
| Numbers differ from the file | Report and draft were made from different runs | Build the draft only from the report file in /workspace/weekly-reports/ for this week. |
| Routine didn't run | Paused, signed out, or usage limit | Bot's name → Details → Routines; check recent runs |
Same job in other agents
Gemini Spark (now "Task" in
Gemini): native fit for Google users.
Gemini tasks can read Sheets, write the report into a Google Doc, and draft or send Gmail. Google says
Gemini asks for confirmation before sending communications. Use a weekly time-based schedule. Gaps: Google AI Pro or Ultra, personal Google account, 18+; not in the EEA, UK, Switzerland or Nigeria. Google warns a schedule may run when you're offline, so keep "draft only" in the task.
Dots (OpenAI): OpenAI's examples include keeping a deck updated, and you can connect it to Slack. In the
ChatGPT mobile app, open your dot's profile → Customize → Custom rules and set messages to Ask before taking action. Gaps:
ChatGPT Pro or Business Premium.
Hermes Agent: xlsx and google-workspace skills cover the report; it can message you on chat apps. Gaps: command-line setup; runs only while its computer is on.
Muse (Meta): partial. It can write the report from an uploaded CSV and asks before sending email. Gaps: a live Google Sheets connector is not verified; reported US and Canada only.
Next step
Ready for Bots that work together?
A3: Build an AI Team With Grok Bot makes this Bot your "reporting" specialist, alongside Inbox, Calendar and Research Bots.
Get the free safety checklist
7 rules for letting an agent act for you, plus a note when prices or features change. We re-check every month. Read the 7 rules.