Weekly contract renewal radar from Deel to Asana and Slack
Every Monday, catch contractor and EOR contracts ending in the next 60 days, open an Asana decision task for each, and post one grouped Slack digest.
Every Monday at 8:30am, check Deel for contractor and EOR contracts that are approaching their end date, open an Asana decision task for each one, and post a single grouped digest to our people ops channel in Slack. Run this on a cron schedule: every Monday at 8:30am.
Start by pulling active contracts from Deel with the List Contracts operation, focusing on the contractor and EOR hiring types since those are the agreements with meaningful fixed end dates. The contracts list uses cursor pagination, so keep passing the cursor from each response back as after_cursor until the cursor comes back null. Do not read only the first page: in an organization with any real tenure, that will silently miss expiring contracts sitting further down the list.
Skip any contract that has no end date. Open ended EOR and permanent agreements never expire, and including them would flood this digest with the same names every single week until people stop reading it.
For every contract whose end date falls inside the next 60 days, call Retrieve a Single Contract to get the full detail we need: worker name, team, exact end date, and rate with its currency.
Sort what you find into three urgency buckets: ending within 14 days, ending in 15 to 30 days, and ending in 31 to 60 days.
Before creating anything in Asana, check whether we already opened a task for that contract. Use Get Tasks from a Project against our renewals project and ignore completed tasks. Match on the Deel contract ID, and always write that contract ID into the task description so this check stays reliable week over week even if someone edits the task title. Prefer this over Asana's workspace task search, which requires a paid plan. If an open task already exists for a contract, reuse it and do not create a second one. A contract ending in 45 days will legitimately appear in the digest several weeks in a row, but it should only ever own one task.
For contracts that do not already have an open task, use Create a Task in the renewals project. Title it as a clear renew or end decision naming the worker and the end date, for example "Renew or end: Priya Raman, contract ends 2026-09-12". Put the contract ID, team, rate and currency in the description. Set the due date to roughly two weeks before the contract actually ends so there is time to act, and if that date has already passed, set the due date to today instead.
Finally, post one grouped digest to our people ops channel with the Slack Bot Send a Message operation. Lead with the most urgent bucket and work down, and under each bucket list the worker, team, end date, and rate with currency, plus a link to the Asana task that owns that decision. Send one single message covering everything, not one message per contract.
If nothing is expiring in the next 60 days, still post a short note saying there is nothing expiring, so the team knows the check ran rather than wondering whether it quietly broke.
What does this prompt do?
- Checks your Deel contracts every Monday morning and flags contractor and EOR agreements that end within the next 60 days, so renewals never sneak up on you
- Sorts everything it finds into urgency buckets: ending within 14 days, in 15 to 30 days, and in 31 to 60 days
- Opens one Asana task per expiring contract, framed as a clear renew or end decision, with a due date about two weeks before the contract actually ends
- Posts a single grouped digest to your people ops Slack channel showing the worker, team, end date and rate, with a link to the task that owns each decision
- Skips open ended agreements and checks for an existing task before creating one, so the project never fills up with weekly duplicates
What do I need to use this?
- A Deel account with permission to view contracts
- An Asana account and a project where renewal tasks should live
- A Slack workspace and the channel your people ops team watches
- A rough idea of how far ahead you want to be warned, if 60 days is not the right window for you
How can I customize it?
- Change the look ahead window from 60 days, or reshape the urgency buckets to match how much notice your team actually needs
- Move the reminder date closer to or further from the contract end date than the default two weeks
- Point it at a different Slack channel, or narrow it to one team, country or currency
- Include or exclude worker types beyond contractors and EOR employees
FAQs
Why does it skip contracts with no end date?
Will it create a duplicate task every Monday for the same contract?
What happens if nothing is expiring?
Do I need a paid Asana plan?
Why 60 days of warning?
Can it cover employees as well as contractors?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
A personal queue of every overdue Guru card, sorted by how late it is, with one-click verify, reassign, comment, and an agent that drafts the refresh for you.
Stop letting contract end dates surprise you.
Get a standing Monday check that turns every approaching contract end into an owned decision with a deadline, before it becomes a scramble.