Google Tasks Completion to CRM Activity Log
When a Google Task linked to a CRM record is completed, the flow logs a completed activity on the matching Dataverse/Dynamics record with the task title, completion time, and notes, and advances the record's next-step field. Captures Google Tasks work as CRM activity history.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow captures Google Tasks work as CRM activity history. When a task is marked complete in a watched Google Tasks list, the flow parses the linked CRM account number from the task notes, looks up the matching Dataverse CRM Account Record, logs a completed-activity entry (task title, completion time, notes, correlation id), advances the record's Next Step, and posts a confirmation to a Microsoft Teams channel. If no matching record is found, it alerts the channel instead.
Why it matters: Work done in Google Tasks is invisible to the CRM. Logging completions builds an accurate activity trail and keeps the pipeline's next step current — with a clear escalation when a completed task can't be matched.
Build status: Built via API-first. Flow ships Off. Flow Checker: 0 errors / 0 warnings.
Use Case
Sales/ops reps work tasks in Google Tasks tied to CRM records. Each task's notes carry a CRM account number after a marker (e.g. CRM: ACC-1042). When the rep completes the task, the matching CRM record should automatically gain a logged activity and have its next step advanced — without the rep touching the CRM. The flow gives a governed, auditable record of Google Tasks work inside Dataverse and notifies the team in Teams.
Flow Architecture
When a Google Task is completed
Google Tasks — OnCompletedTaskInListV2Batch trigger (splitOn body/items, 5-min recurrence) that fires per newly-completed task in the watched list.
Set Correlation Id
Initialize VariableEnd-to-end trace id (guid()) stamped on the activity row.
Init CRM Key Marker
Initialize VariableMarker that precedes the account number in notes, from env var.
Init Default Next Step
Initialize VariableNext-step value written onto the record, from env var.
Init Teams Group Id
Initialize VariableTeams team id for the notification, from env var.
Init Teams Channel Id
Initialize VariableTeams channel id for the notification, from env var.
Init Task Title / Notes / Id / Completed On
Initialize VariableCapture the completed task title, notes (carry the CRM key), id, and completion timestamp.
Init Account Key
Initialize VariableCRM account number parsed from the task notes after the marker.
List Matching CRM Records
Microsoft Dataverse — ListRecordsFind the record on flowlibs_crmaccountrecords whose Account Number matches the parsed key.
Condition CRM Record Found
ConditionBranch on whether a matching record exists.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_GoogleTaskListId | String | @default | Google Tasks list id whose completed tasks are processed. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team/group id for notifications. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for notifications. |
| flowlibs_CrmKeyMarker | String | CRM: | Marker in task notes that precedes the CRM account number. |
| flowlibs_DefaultNextStep | String | Follow up after task completion | Next-step value written onto the matched record. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Google Tasks | shared_googletasks | OnCompletedTaskInListV2 |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Key marker
- Change flowlibs_CrmKeyMarker to match your task-notes convention (e.g. Acct#, Record:).
- Next step
- Set flowlibs_DefaultNextStep, or replace the static value with logic that picks the next stage based on the record's current state.
- Idempotency
- flowlibs_taskid is stored on every activity row; add a ListRecords dedupe on flowlibs_taskid before CreateRecord if the trigger ever re-delivers.
- Outcome capture
- Extend the parse to pull a result/outcome note from the task and store it on the activity row.
- Lookup relationship
- For a true CRM model, replace the accountnumber string key with a Dataverse lookup from the activity log to the account record.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Parse account key from notes
Text after the marker, up to the first newline.
EXPR.02Record-found condition
True when at least one CRM record matches.
EXPR.03ListRecords filter
OData filter matching the account number.
EXPR.04Matched record id
Record id used for UpdateRecord.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.