Weekly
Log new SEO issues to a sheet and create Asana tasks to fix them
Every Monday new broken backlinks are added to your Google Sheet and each one gets an Asana task, so nothing found is forgotten.
- Runs
- Weekly
- Apps
- Asana, Google Sheets
- AI
- Not needed
- Access
- Sheets edit; Asana write
Send this to your assistant
Create a ClickRuntime automation: every Monday, fetch my broken backlinks from DataForSEO, append new ones to my Google Sheet, and create an Asana task for each.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A content marketer at an online shop runs an SEO report every few weeks and finds a list of backlinks pointing at pages that no longer exist. Each one is a link another site gave for free, now sending visitors and ranking value to a 404. The list goes into a spreadsheet that nobody revisits, and the same broken links show up in the next report.
Checking every week and turning each newly found problem into a task means fixes such as redirects actually get scheduled and done, and the sheet becomes a record of what was found and when.
What you get out of it
Lost link value gets recovered
Each broken backlink fixed with a redirect sends visitors and ranking value back to a live page. Small fixes add up over months.
Only new problems create work
Links already in the sheet are skipped. Your team sees each issue once, not every week.
Findings turn into assigned tasks
Each new issue becomes an Asana task in the project your team already plans from. It gets an owner and a due date instead of sitting in a report.
A running log you can show
The sheet records when each problem was found. It is easy to show a manager or client how many issues were spotted and fixed each month.
Steady rather than a big clean-up
A few issues a week are easy to handle. It avoids the quarterly audit that turns up hundreds of problems at once.
How it works
What happens, step by step
Every Monday, ClickRuntime asks DataForSEO for backlinks that point to broken pages on your site.
It skips any it has already logged, so only new problems come through.
Each new broken link is added as a row in your Google Sheet with the date found.
An Asana task is created for each one so someone can set up a redirect or fix the page.
Before it runs live
- Connect Asana
- Connect your Google Sheets account and pick the spreadsheets it may use
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
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Asana and Google Sheets steps into one automation
Under the hood
The code that runs this automation
from datetime import date
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, state
DOMAIN = "example.com"
SHEET_ID = "your-spreadsheet-id"
PROJECT_ID = "your-asana-project-id"
@on_trigger
def run(event):
auth = (credentials.secret("DATAFORSEO_LOGIN"), credentials.secret("DATAFORSEO_PASSWORD"))
res = http.post("https://api.dataforseo.com/v3/backlinks/backlinks/live", auth=auth,
json=[{"target": DOMAIN, "filters": ["is_broken", "=", True], "limit": 500}]).json()
items = (res["tasks"][0]["result"] or [{}])[0].get("items") or []
seen = set(state.get("seen") or [])
new = [i for i in items if f"{i['url_from']}|{i['url_to']}" not in seen]
if not new:
return {"new": 0}
rows = [[date.today().isoformat(), i["url_from"], i["url_to"]] for i in new]
sheets = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
sheets.spreadsheets().values().append(spreadsheetId=SHEET_ID, range="Broken links!A:C", valueInputOption="USER_ENTERED", body={"values": rows}).execute()
for i in new:
http.post("https://app.asana.com/api/1.0/tasks", headers={"Authorization": f"Bearer {credentials.secret('ASANA_TOKEN')}"},
json={"data": {"name": f"Fix broken backlink to {i['url_to']}", "notes": f"Linked from {i['url_from']}", "projects": [PROJECT_ID]}})
seen.add(f"{i['url_from']}|{i['url_to']}")
state.set("seen", sorted(seen))
return {"new": len(new)}FAQ
Common questions
Where does the SEO data come from?
How does it know an issue is new?
Can it track new ranking keywords instead?
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
Export Asana project tasks to Google Sheets
Every weekday morning a tab is rewritten with all tasks in an Asana project: section, assignee, due date, completed and link.
See how it worksTurn your weekly sales sheet into Asana tasks
Every Monday the top five actions from your sales or stock sheet are created as Asana tasks assigned to you, with a summary email.
See how it worksCreate Asana onboarding projects from new sheet rows
Add a client to your sheet and an Asana project is created from your onboarding template, with the link written back to the row.
See how it worksKeep exploring
Set up “Log new SEO issues to a sheet and create Asana tasks to fix them” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.