How to Send Webhooks With Claude Cowork Scheduled Tasks
No-codeClaude Cowork's Scheduled feature lets you create recurring AI tasks that run automatically on a timetable you define. When you pair a scheduled task with an HTTP action step, Claude becomes a proactive notification system — checking sources, reasoning about what it found, and POSTing structured results to a webhook endpoint without any manual intervention. This guide covers the exact steps to make that work.
What You'll Need
- A Claude Cowork account with access to the Scheduled feature (check your plan — scheduling is typically a paid-tier capability)
- A webhook endpoint URL ready to receive POST requests. Use webhook.site or RequestBin for testing
- A defined task: what should Claude check or produce, and when should the webhook fire
- Optional: an existing Slack incoming webhook URL, a database write endpoint, or another HTTP-accepting service as your final destination
Step 1: Open the Scheduled Tasks Panel
- Log in to Claude Cowork and navigate to your workspace.
- Locate the Scheduled option in the left sidebar or top navigation. Depending on your plan and UI version, this may be labeled "Automations," "Scheduled Tasks," or appear under a "+" icon for new task types.
- Click New Scheduled Task (or equivalent button in your UI version).
- Give the task a clear, descriptive name — you'll use this to find and manage it later. Example: "Daily competitor blog digest → Slack webhook".
Step 2: Write the Task Prompt
The quality of your webhook payload depends almost entirely on how precisely you write this prompt. Claude will execute it on every scheduled run, so clarity and output format specificity are critical.
- Define the source material. Tell Claude what to read, fetch, or reason about. Examples:
- "Fetch the RSS feed at https://example.com/feed.xml and extract the titles and URLs of any items published in the last 24 hours."
- "Search for news articles about [topic] published today. Summarize the top 3 results."
- "Review the contents of the document I've attached and identify any items that match [criteria]."
- Define any filter condition. If the webhook should only fire when something relevant was found (not on every run regardless), make this explicit: "If no new articles were found, end the task without calling any HTTP action."
- Specify the exact output format. Tell Claude to produce a specific JSON structure and nothing else:
Return only the following JSON, with no additional text: { "summary": "<2-3 sentence summary of findings>", "items": [ { "title": "...", "url": "...", "published": "..." } ], "item_count": <number>, "run_at": "<ISO 8601 timestamp>" } - Keep the prompt under 500 words if possible. Longer prompts increase the risk of Claude adding explanatory prose around the JSON output, which breaks downstream parsing.
Step 3: Set the Schedule
- In the scheduling section of the task configuration, choose your frequency:
- Fixed interval: every hour, every 6 hours, once daily, once weekly
- Specific time: 8:00am every weekday, 9:00am every Monday
- Cron expression (if your plan supports it): gives full control for complex schedules like "every weekday at 7:45am and 4:45pm"
- Set your timezone. Many users miss this — the default is UTC, which means an "8am" task actually runs at 1am Pacific or 4am Eastern. Always verify the displayed local run time before saving.
- If this is a time-bounded task (e.g., monitoring a product launch window), set an end date so you don't leave it running and incurring API calls indefinitely.
Step 4: Add the HTTP Webhook Action
- In the task builder, look for an Actions or Then do… step after the prompt.
- Add a new action and choose HTTP Request or Send Webhook.
- Set the method to POST.
- Paste your test webhook URL (webhook.site or RequestBin) into the endpoint field.
- Set
Content-Type: application/jsonin the headers. - Set the request body to Claude's output. In Claude Cowork, this is typically referenced as
{{task.output}}or{{response}}— check your UI for the correct variable name. - If your real endpoint requires a secret token, add an
Authorization: Bearer YOUR_TOKENheader. Store the token in Cowork's credential vault rather than hardcoding it in the task. - If you included a "do nothing if no results" condition in your prompt from Step 2, verify that this action is set to only run if the previous step produced output — most task builders have a conditional toggle for this.
Step 5: Run a Manual Test
- Click Run Now (or equivalent) to trigger the task immediately without waiting for the schedule.
- Open your webhook.site URL in another browser tab and watch for the incoming POST request.
- Verify:
- The payload arrived and is valid JSON (not wrapped in a code block or prefaced with "Here is the JSON:")
- The field names match what you specified in your prompt
- Dynamic values like timestamps and URLs are populated correctly, not left as placeholder text
- If the JSON is malformed or wrapped in prose, return to your prompt and add a stronger instruction at the end: "Respond with only the raw JSON. Do not include any explanation, code fences, or surrounding text."
- Run the test a second time if your task depends on "what changed since last run" — the first run sets the baseline state, the second run exercises the comparison logic.
- Check the task's execution log for any errors — common issues are tool call failures (Claude couldn't fetch the URL), timeout errors on slow pages, and variable reference mismatches in the action step.
Step 6: Switch to Your Real Endpoint and Activate
- Replace the webhook.site test URL with your real destination:
- Slack: use a Slack incoming webhook URL (Settings → Integrations → Incoming Webhooks)
- Database: point at your own API endpoint that writes the payload to a table
- Zapier/Make: use their "catch webhook" URL to hand off to further automation steps
- Pipedream: use a Pipedream HTTP trigger URL to run additional processing before final delivery
- Save the task and click Activate (or toggle it to Active/On).
- Confirm the next scheduled run time is shown and looks correct for your timezone.
- Monitor the first 2–3 live runs in the execution history. Confirm the real endpoint is accepting the payload and your downstream system (Slack channel, database, etc.) is receiving data correctly.
- Set up a failure alert so you're notified if the task errors out — Claude Cowork can typically send an email on task failure; configure this under the task's notification settings.
Common Use Cases
- Morning briefing webhook to Slack — Claude compiles a daily summary of news for a topic and POSTs it to a Slack channel every weekday at 8am
- Content calendar reminder — Claude checks a Google Sheet or document weekly and fires a webhook if any deadlines are within 48 hours
- Keyword monitoring digest — Claude searches for recent mentions of a brand, product, or topic and delivers a structured digest to a database or notification channel daily
- Report generation → delivery pipeline — Claude generates a structured report from source data on a schedule and POSTs it to an internal API that stores or distributes it
- RSS digest with AI triage — Claude reads an RSS feed, filters items by relevance using its own judgment, and only fires the webhook for items that meet the criteria — eliminating noise that a simple RSS-to-webhook tool would forward indiscriminately
Troubleshooting
- Task runs but no webhook fires: Your "do nothing if no results" condition may be filtering out everything. Run the task without the condition temporarily to see the raw output, then refine the filter.
- Webhook fires with a string payload instead of JSON: Claude wrapped the JSON in prose. Add to the end of your prompt: "Your entire response must be only the JSON object. Nothing else."
- Task fails on fetch steps: The target URL may block automated access. Try instructing Claude to use web search to find the information rather than fetching the URL directly, or use a URL that returns a machine-readable feed (RSS, JSON API) rather than an HTML page.
- Timestamp is wrong or missing: Claude may not have access to real-time clock data in all task configurations. Ask Claude to use the date/time it was given in its context, or include the current date explicitly in a system prompt if Cowork supports it.
- Downstream endpoint returns errors: Verify the Content-Type header is set to
application/jsonand the payload is actually valid JSON. Use jsonlint.com to validate the raw payload from a test run.