The moment it happens
Set up an Asana project and Slack channel for each new client
When a new client comes in, they get an Asana project from your template and their own Slack channel, with links posted in #clients.
- Runs
- The moment it happens
- Apps
- Asana, Slack
- AI
- Not needed
- Access
- Asana write; channels:manage, chat:write
Send this to your assistant
Create a ClickRuntime automation: when my intake form posts a new client to this link, create an Asana project from my template, create a Slack channel for them, and post both links in #clients.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A design agency starts every client the same way: copy the onboarding project in Asana, rename it, create a Slack channel, invite the team and tell everyone. It takes twenty minutes when someone remembers, and when they do not, the first week of work happens in scattered DMs.
Doing all of it the moment the intake form is submitted means the project and channel are ready before the kickoff call, and every client starts with the same structure.
What you get out of it
Ready before the kickoff call
The project and channel exist the moment the client is confirmed. The first conversation can happen in the right place from day one.
Every project starts from the template
Tasks, sections and deadlines come from your standard onboarding template. Nothing is left out because someone copied an old project by hand.
Consistent channel names
Channels follow one naming pattern, such as client-northwind. People can find any client's channel without asking.
One announcement with both links
The post in #clients gives the team the project and channel together. Nobody has to hunt for where the new work lives.
How it works
What happens, step by step
Your intake form or CRM tells ClickRuntime when a new client is confirmed.
A new Asana project is created for them from your onboarding template.
A Slack channel is created for the client using a consistent name.
A message with links to the new project and channel is posted in your #clients channel.
Before it runs live
- Connect Asana
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Asana and Slack steps into one automation
Under the hood
The code that runs this automation
import re
from slack_sdk import WebClient
from clickruntime import on_event, credentials, http
TEMPLATE_GID = "your-asana-project-template-gid"
TEAM_GID = "your-asana-team-gid"
@on_event
def handle(event):
client = ((event.json or {}).get("client_name") or "").strip()
if not client:
return {"skipped": "no client name"}
asana = {"Authorization": f"Bearer {credentials.connection('asana', 'work')}"}
job = http.post(f"https://app.asana.com/api/1.0/project_templates/{TEMPLATE_GID}/instantiateProject", headers=asana,
json={"data": {"name": client, "team": TEAM_GID, "public": True}}).json()["data"]
project_url = f"https://app.asana.com/0/{job['new_project']['gid']}"
slack = WebClient(token=credentials.connection("slack", "work"))
name = "client-" + re.sub(r"[^a-z0-9]+", "-", client.lower()).strip("-")[:70]
try:
channel = slack.conversations_create(name=name)["channel"]
except Exception:
channel = slack.conversations_create(name=f"{name}-2")["channel"]
slack.chat_postMessage(channel="#clients", text=f"New client *{client}*\nAsana: {project_url}\nSlack: <#{channel['id']}>")
return {"project": job["new_project"]["gid"], "channel": channel["id"]}FAQ
Common questions
Which form tools can send new clients?
What if a channel with that name already exists?
Is the Slack channel public or private?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Score leads, create Asana tasks and alert sales in Slack
Hot leads are scored on arrival, turned into Asana tasks and posted to your sales channel so someone picks them up straight away.
See how it worksTurn meeting notes into Asana tasks and a Slack recap
Send your meeting notes to a link and get an Asana task for each action item, with owner and due date, plus a recap in Slack.
See how it worksPost a daily standup from Asana to Slack
Every weekday morning, your team channel shows what each person finished yesterday, what is due today and what is overdue.
See how it worksKeep exploring
Set up “Set up an Asana project and Slack channel for each new client” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.