ABOUT ME     |     RESOURCES     |     SPEAKING     |     GET IN TOUCH

Setup Checklist: Asana → Google Data Studio

🚀 Asana → Google Data Studio Setup

Follow these 26 steps to connect your Asana time entries to a live dashboard

0 of 26 steps completed
Part 1: Asana API Setup
Step 1: Get Your Asana Personal Access Token
Go to your Asana account. Click your profile photo → Settings → Apps & integrations → Personal access tokens. Click "Create new token", name it "Asana Sync", and copy it somewhere safe.
Step 2: Get Your Asana Workspace GID
Go to your Asana workspace. Look at the URL: asana.com/0/[18-digit]/list. That 18-digit number is your Workspace GID. Copy it.
Step 3: Get Your Project GID
Open the project where your team logs time. Copy the URL and find the project GID: asana.com/0/[workspace]/[18-digit]/list
Step 4: Test the Asana API (Optional)
Open a terminal and run this to test your token:
curl -H "Authorization: Bearer YOUR_TOKEN" \ "https://app.asana.com/api/1.0/projects/YOUR_PROJECT_GID/tasks"
Step 5: Save Your Credentials
Write down: (1) Asana Token, (2) Workspace GID, (3) Project GID. You'll need these next.
Part 2: Supabase Database Setup
Step 6: Create a Free Supabase Project
Go to supabase.com. Sign up or log in. Click "New project". Name it "Asana Time Tracking". Choose your region. Wait 1-2 minutes for initialization.
Step 7: Add the Asana Token to Vault
In Supabase, go to Settings → Vault. Click "Create secret". Name it asana_pat and paste your Asana token. Save it.
Step 8: Create the time_entries Table
Go to SQL Editor. Paste and run this:
CREATE TABLE time_entries ( gid TEXT PRIMARY KEY, workspace_gid TEXT, user_gid TEXT, user_name TEXT, task_gid TEXT, task_name TEXT, project_gid TEXT, project_name TEXT, duration_minutes NUMERIC, entered_on DATE, synced_at TIMESTAMP );
Step 9: Create Indexes
Run this for faster queries:
CREATE INDEX idx_user_name ON time_entries(user_name); CREATE INDEX idx_entered_on ON time_entries(entered_on);
Step 10: Enable RLS
Go to Authentication → Policies. Enable Row Level Security for time_entries table. Add a policy to allow SELECT for authenticated users.
Part 3: Deploy Sync Function
Step 11: Enable Required Extensions
In SQL Editor, run:
CREATE EXTENSION IF NOT EXISTS pg_cron; CREATE EXTENSION IF NOT EXISTS pg_net;
Step 12: Create Edge Function
Go to Edge Functions. Create a new function named sync-asana-time-entries. Copy the function code and paste it in. (Get the code from the Claude Prompts guide.)
Step 13: Test the Function
In Edge Functions, click your function. Click "Test". Check the Response tab for success.
Step 14: Verify Data Synced
Go to SQL Editor. Run: SELECT COUNT(*) FROM time_entries; You should see a count > 0.
Step 15: Troubleshoot if Needed
If count is 0, see the "Claude Prompts Guide" (separate artifact) for debugging prompts.
Part 4: Automatic Daily Sync
Step 16: Schedule Cron Job
In SQL Editor, run:
SELECT cron.schedule( 'sync-asana-time-entries', '0 9 * * *', 'SELECT net.http_post(...)' );
Replace placeholders with your Supabase values.
Step 17: Verify Cron is Active
Run: SELECT * FROM cron.job; You should see your sync job with active=true.
Step 18: Set Timezone (If Needed)
If you need the job to run at a different time, ask Claude for the correct cron expression for your timezone. (See Claude Prompts Guide.)
Part 5: Google Data Studio Dashboard
Step 19: Go to Google Data Studio
Go to datastudio.google.com. Click "Create" → "Report". Name it "Asana Time Tracking".
Step 20: Create PostgreSQL Connector
Click "Create new data source". Search for "PostgreSQL". Enter your Supabase credentials: Host, Port, Database, Username/Password.
Step 21: Connect to time_entries Table
Select the postgres database. Choose the "public.time_entries" table. Click "Connect".
Step 22: Create Your First Chart
Add a table chart. Rows: user_name. Values: SUM(duration_minutes). This shows total hours per person.
Step 23: Add Filters
Add a date range filter for "entered_on". This lets you view different date ranges.
Step 24: Style Your Dashboard
Add a title, change colors, arrange charts. Make it look how you want it.
Step 25: Share Your Dashboard
Click "Share" in the top right. Choose who can view it. Copy the link to share with your team.
Step 26: Done!
Your pipeline is live. Data syncs automatically every morning at 9am UTC. Check back tomorrow to see new entries.

Want to Skip the DIY and Get Help Setting It Up?

I’ve helped a few operations teams through this process. If you’d rather have someone walk you through it or get it set up for your team, book a call with me and we can figure out the best path for you.

© 2014-2026 My Virtual Partnr LLC, All Rights Reserved  | Privacy Policy | Terms and Conditions | Disclaimer