Back to Client Reporting & Status Updates

Developer Handover Pack

Everything an engineer needs to build end to end: current state, agent specs, data flow, security, and a pre-build checklist.

4 pagesPDF · Technical
FS-DOC-04Technical

Developer Handover Pack

Client Reporting & Status Updates

Document code
FS-DOC-04
Process
Client Reporting & Status Updates
Build option
Standard (recommended)
Total build effort
56 hours
Delivery window
2 to 3 weeks
Audience
Assigned developer
Date issued
[Today's Date]
Client
[YourCompany.com]
This pack contains all specifications, data flows, security requirements, and build checklists needed to implement the automation without further discovery. Read every section before writing any code.

01Process snapshot

The current process runs entirely on manual effort. An Account Manager pulls status from Asana by hand, decides what is relevant, writes a bespoke update in Google Docs, passes it for internal review, then sends and logs it manually. The process runs approximately 40 times per month across active accounts and consumes 8 hours of senior time per week. Two steps are confirmed bottlenecks and are the primary targets for automation.

Step
Owner
Tool
Time (min)
Bottleneck
Automated
1. Gather Project Status
Account Manager
Asana
40
Yes
Yes
2. Decide What Matters
Account Manager
None
25
No
Yes
3. Write Client Update
Account Manager
Google Docs
55
Yes
Yes
4. Internal Review
Delivery Lead
None
20
No
Human gate
5. Send To Client
Account Manager
Gmail
15
No
Yes
6. Log In CRM
Account Manager
HubSpot
15
No
Yes
Time metric
Current state
After automation
Time per update
50 min
12 min
Senior hours/week
8 hrs
2 hrs
Updates on time
74%
100%
Annual staff cost
$24,900
$6,200
Process runs/month
~40
~40 (no change in volume)
Steps 1, 2, 3, 5, and 6 are eliminated from human effort. Step 4 (Internal Review) remains a deliberate human gate. The Account Manager reviews and optionally edits the draft before the Send & Log Agent fires.
Developer Handover PackPage 1 of 4
FS-DOC-04Technical

02Agent specifications

Status Gathering Agent

Queries the connected Asana workspace at the start of each reporting window and retrieves task-level progress, open blockers, overdue items, and upcoming milestones for each active account project. The agent normalises the raw Asana data into a structured weekly status object that downstream agents can consume directly. It replaces the 40-minute manual Asana trawl and the 25-minute prioritisation step.

Trigger
Scheduled reporting window opens (weekly, configurable day/time per account)
Tools
Asana (Tasks API, Projects API), FullSpec Automation (orchestration)
Replaces steps
Step 1 (Gather Project Status) and Step 2 (Decide What Matters)
Build time
Approx. 14 hours
Implementation notes
Requires an Asana Personal Access Token or OAuth 2.0 service account scoped to the relevant workspace. Filter tasks by project tag matching account ID. Map task.completed_at, task.due_on, task.custom_fields for RAG status. Normalise to a consistent status schema before passing downstream. Configurable threshold for 'blocker' classification (e.g. tasks overdue by more than N days).
// Input
account_id: string          // Internal account identifier
reporting_week: ISO8601     // e.g. 2024-06-03
asana_project_gid: string   // Asana project GID mapped to account

// Output
status_object: {
  account_id: string,
  week_ending: ISO8601,
  tasks_completed: Task[],
  tasks_in_progress: Task[],
  blockers: Task[],
  upcoming_milestones: Milestone[],
  rag_status: 'green' | 'amber' | 'red'
}
Update Drafting Agent

Receives the structured status object from the Status Gathering Agent and produces a client-ready update document in the house style. The LLM prompt uses a locked template that enforces tone, section order, and word count. The draft is written to a Google Doc in a designated review folder and a review link is surfaced to the Account Manager via the configured notification channel. The agent replaces the 55-minute manual writing step.

Trigger
Status Gathering Agent emits a completed status_object for an account
Tools
Google Docs (Drive API v3, Docs API v1), FullSpec Automation (LLM orchestration)
Replaces steps
Step 3 (Write Client Update)
Build time
Approx. 18 hours
Implementation notes
Create a templated Google Doc per account using the Drive API (copy from master template file). Inject structured status data via Docs API batchUpdate. LLM prompt must include: house style guide excerpt, client name, RAG status, and a max word count (recommended 300 words). Store draft doc URL in the run record. Notify Account Manager via Gmail or Slack with a direct review link. Human gate fires here; do not advance to Send & Log until approval flag is set.
// Input
status_object: StatusObject  // From Status Gathering Agent
template_doc_id: string      // Google Drive ID of master template
client_display_name: string  // Name used in salutation
house_style_prompt: string   // Injected system prompt fragment

// Output
draft_doc_url: string        // Google Docs review URL
draft_doc_id: string         // Google Drive file ID
run_id: string               // Orchestration run reference
review_status: 'pending_review'
Send & Log Agent

Fires only after the Account Manager approves the draft (review_status set to 'approved'). Reads the final Google Doc content, composes and sends an HTML email to the client contact via Gmail, then creates or updates a HubSpot engagement record against the account. The agent replaces the 15-minute send step and the 15-minute manual CRM logging step.

Trigger
Account Manager sets review_status to 'approved' on the run record
Tools
Gmail (Gmail API v1), HubSpot (CRM Engagements API v3)
Replaces steps
Step 5 (Send To Client) and Step 6 (Log In CRM)
Build time
Approx. 12 hours
Implementation notes
Use Gmail API messages.send with the From header set to the Account Manager's delegated address (requires Gmail delegation or a shared mailbox OAuth token). Read final doc content via Docs API before composing email. HubSpot engagement type should be EMAIL; associate with the correct contact and company by matching account_id to HubSpot companyId. Store Gmail message_id on the run record for audit. Trigger a FullSpec Automation webhook on completion to mark the run as done.
// Input
run_id: string               // Orchestration run reference
draft_doc_id: string         // Approved Google Docs file ID
client_email: string         // Recipient email address
hubspot_company_id: string   // HubSpot company record ID
account_manager_email: string

// Output
gmail_message_id: string     // Sent message ID for audit log
hubspot_engagement_id: string
run_status: 'complete'
sent_at: ISO8601
Developer Handover PackPage 2 of 4
FS-DOC-04Technical

03End-to-end data flow

Full data flow: reporting window trigger through to sent update and CRM log
// ── TRIGGER ─────────────────────────────────────────────────────────────
CRON schedule fires  ->  FullSpec Automation orchestrator wakes
  payload: { account_id, reporting_week, asana_project_gid,
             template_doc_id, client_email, hubspot_company_id,
             account_manager_email, client_display_name }

// ── AGENT 1: Status Gathering Agent ─────────────────────────────────────
FullSpec -> Asana Projects API
  GET /projects/{asana_project_gid}/tasks?opt_fields=name,completed_at,
       due_on,custom_fields,assignee
  -> filter: active tasks + tasks completed in reporting_week
  -> classify: blockers (overdue > 2 days), milestones, in-progress
  -> derive rag_status from blocker count + overdue pct

FullSpec emits status_object:
  { account_id, week_ending, tasks_completed[], tasks_in_progress[],
    blockers[], upcoming_milestones[], rag_status }

// ── AGENT 2: Update Drafting Agent ──────────────────────────────────────
FullSpec -> Google Drive API
  POST /files/{template_doc_id}/copy
  -> new draft_doc_id created in /ClientUpdates/{account_id}/

FullSpec -> Google Docs API
  POST /documents/{draft_doc_id}:batchUpdate
  -> inject: client_display_name, rag_status, completed summary,
             blocker list, upcoming milestones

FullSpec -> LLM (GPT-4o via FullSpec Automation)
  system: house_style_prompt
  user:   status_object JSON + doc placeholder markers
  -> returns: polished prose sections (max 300 words)

FullSpec -> Google Docs API batchUpdate (second pass)
  -> write LLM prose into placeholder sections

FullSpec -> Gmail API (notification only)
  POST /users/me/messages/send
  -> To: account_manager_email
  -> Body: 'Your draft update is ready: {draft_doc_url}'

run_record.review_status = 'pending_review'

// ── HUMAN GATE ──────────────────────────────────────────────────────────
Account Manager opens draft_doc_url
  -> Optional edits made directly in Google Doc
  -> AM sets review_status = 'approved' via FullSpec review UI
     OR clicks approve link in notification email

// ── AGENT 3: Send & Log Agent ────────────────────────────────────────────
FullSpec <- webhook: { run_id, review_status: 'approved' }

FullSpec -> Google Docs API
  GET /documents/{draft_doc_id}  -> extract final plain-text + HTML body

FullSpec -> Gmail API
  POST /users/me/messages/send
  From: account_manager_email (delegated send)
  To:   client_email
  Subject: 'Your weekly update: {client_display_name} w/e {week_ending}'
  Body: HTML-formatted update content
  -> returns: gmail_message_id

FullSpec -> HubSpot Engagements API v3
  POST /crm/v3/objects/emails
  -> associations: companyId = hubspot_company_id
  -> properties: hs_timestamp, hs_email_subject, hs_email_text,
                 hs_email_html, hubspot_owner_id (AM)
  -> returns: hubspot_engagement_id

FullSpec marks run_record:
  { run_status: 'complete', sent_at: ISO8601, gmail_message_id,
    hubspot_engagement_id }

// ── OUTPUT ───────────────────────────────────────────────────────────────
Client receives weekly update email
HubSpot account record reflects sent communication
FullSpec dashboard shows run complete

04Security and compliance requirements

The table below covers every credential, data-handling, and compliance consideration identified for this build. Items marked 'To confirm' require a decision or confirmation from [YourCompany.com] before the build is marked production-ready.

#
Requirement
Detail
Status
1
Asana auth method
Use OAuth 2.0 service account scoped to the reporting workspace only. Do not use a personal PAT tied to an individual user account.
To confirm
2
Asana OAuth scopes
Minimum required scopes: tasks:read, projects:read, workspaces:read. No write scopes needed for this agent.
To confirm
3
Google OAuth scopes
Drive API: drive.file (access only to files created by the app). Docs API: documents (read/write on created docs only). Do not request drive or drive.readonly (too broad).
To confirm
4
Gmail delegation
Send & Log Agent sends from the Account Manager's address. Confirm that Google Workspace admin has enabled delegation for the AM's mailbox, or use a shared mailbox with explicit consent.
To confirm
5
HubSpot API key vs private app
Use a HubSpot Private App token (not a legacy API key). Scopes required: crm.objects.companies.read, crm.objects.contacts.read, crm.objects.emails.write.
To confirm
6
Credential storage
All tokens and secrets stored in FullSpec Automation's encrypted credential vault. No plaintext secrets in workflow nodes, environment files, or version control.
Mandatory
7
PII in status data
Asana task data may contain client names, project details, and financial references. Data must not be logged to any external service outside of the approved stack (Asana, Google Docs, Gmail, HubSpot).
To confirm
8
LLM data handling
Status content is sent to the LLM endpoint via FullSpec Automation. Confirm that [YourCompany.com] has reviewed the FullSpec data processing agreement and that client data may be processed by the LLM provider.
To confirm
9
Google Doc access control
Draft documents must be created in a folder accessible only to the Account Manager and Delivery Lead. Share settings must not default to 'anyone with the link'.
To confirm
10
Token refresh handling
Implement automatic OAuth token refresh for Google and HubSpot. Workflow must surface an alert if a token refresh fails rather than silently skipping a run.
Mandatory
11
Audit trail
Every completed run must write a log record containing: run_id, account_id, sent_at, gmail_message_id, hubspot_engagement_id, and AM approver identity. Retain for a minimum of 12 months.
To confirm
12
Data residency
Confirm whether [YourCompany.com] has a requirement to keep client data within a specific geographic region. Google Workspace region and HubSpot data center selection must match if so.
To confirm
Developer Handover PackPage 3 of 4
FS-DOC-04Technical

05Pre-build checklist

The checklist below is split into two groups. Items in the first group must be provided or confirmed by [YourCompany.com] before the developer begins. Items in the second group are the developer's own setup responsibilities.

Client to provide: all items below must be confirmed or supplied before build begins. Incomplete access will block progress at the integration stage.
Asana workspace access : Provide the workspace GID and confirm an OAuth app or service account can be registered. Map each active client account to its corresponding Asana project GID.
Google Workspace admin access : A Workspace admin must authorise the OAuth consent screen for Drive and Docs scopes, and enable Gmail delegation for the Account Manager's mailbox.
Master Google Doc template : Provide the Google Drive file ID of the approved client update template. The template must include named placeholder markers (e.g. {{RAG_STATUS}}, {{COMPLETED_SUMMARY}}) for injection.
HubSpot Private App token : Create a HubSpot Private App with the scopes listed in Section 04, Row 5. Supply the token to the developer via a secure channel (not email).
Client contact email mapping : Supply a mapping of account_id to client_email address and HubSpot companyId. A CSV or shared spreadsheet is acceptable.
House style guide : Provide the house style guide excerpt or a written brief covering tone, preferred structure, sign-off wording, and any prohibited phrases for client communications.
Account Manager email address(es) : Confirm the email address(es) from which updates should be sent, and that Gmail delegation is active for each.
LLM data processing confirmation : Confirm in writing that client project data may be processed by the FullSpec Automation LLM endpoint as covered in the data processing agreement.
Reporting schedule per account : Confirm the day and time each active account's reporting window should trigger (e.g. every Friday at 09:00 local time).
Developer to set up: the items below are the developer's responsibility and should be completed in parallel with client item collection where possible.
Provision FullSpec Automation workspace : Create the project workspace in FullSpec Automation and invite [YourCompany.com] stakeholders with read-only access for review.
Register Google OAuth app : Create an OAuth 2.0 client in Google Cloud Console for the [YourCompany.com] project. Configure the consent screen, add the required scopes (drive.file, documents, gmail.send), and store credentials in the FullSpec vault.
Register Asana OAuth app : Create an Asana developer app in the workspace. Configure the redirect URI for FullSpec Automation. Store the client ID and secret in the vault.
Store all credentials in the vault : Add Asana OAuth token, Google OAuth token, HubSpot Private App token, and any FullSpec API keys to the encrypted credential vault. Label each credential clearly with the service and environment (dev/prod).
Create Google Drive folder structure : Create the /ClientUpdates/{account_id}/ folder hierarchy in the designated Google Drive. Set folder sharing to restricted (named users only).
Build account configuration table : Create a configuration table in FullSpec Automation mapping account_id to asana_project_gid, template_doc_id, client_email, hubspot_company_id, account_manager_email, and cron schedule.
Configure CRON triggers : Set up one CRON trigger per active account based on the reporting schedule provided by the client. Use the account_id as the trigger payload key.
Set up error alerting : Configure FullSpec Automation error hooks to notify the developer (and optionally the Account Manager) via email if any agent step fails or a token refresh is unsuccessful.
Prepare dev/staging environment : Run all agents against a test Asana project and a test HubSpot sandbox before connecting to live client data. Use a dedicated test Google Doc template.

06Recommended build stack

Layer
Tool
Purpose
Monthly cost
Auth method
Orchestration
FullSpec Automation
Agent orchestration, scheduling, LLM routing, credential vault, run logging
$149/month
FullSpec API key
Project data source
Asana
Task and milestone data retrieval for all active account projects
$0 (existing)
OAuth 2.0
Document drafting
Google Docs + Drive
Template copy, content injection, AM review interface
$0 (existing Workspace)
OAuth 2.0 (drive.file, documents)
Email send
Gmail
Sends approved client updates from the Account Manager's address
$0 (existing Workspace)
OAuth 2.0 (gmail.send, delegation)
CRM logging
HubSpot
Creates email engagement records against account and contact records
$0 (existing CRM)
HubSpot Private App token
LLM (prose generation)
GPT-4o via FullSpec
Converts structured status data into client-friendly prose in house style
Included in FullSpec plan
FullSpec internal routing
Total monthly tooling cost
$149/month (FullSpec Automation only; all other tools are existing)
Automation cost (annualised)
$1,788/year
Annual saving
$18,700/year
Payback period
3 months
Total estimated build effort
56 hours
Build stage
Start week
End week
Effort (est.)
Owner
Foundation and integrations
Week 1
Week 1
10 hrs
Developer
Status Gathering Agent
Week 1
Week 2
14 hrs
Developer
Update Drafting Agent
Week 2
Week 3
18 hrs
Developer
Send & Log Agent
Week 3
Week 3
12 hrs
Developer
End-to-end QA and launch
Week 3
Week 3
2 hrs
Developer + AM
The 56-hour estimate assumes all client-provided items (Section 05) are ready before Week 1 begins. Delays in OAuth app approval or missing account mappings will extend the timeline. Build should not begin until the pre-build checklist is complete.
Developer Handover PackPage 4 of 4

More documents for this process

Every document generated for Client Reporting & Status Updates.

Launch Plan
Operations · Owner
View
ROI and Business Case
Finance · Owner
View
Process Runbook / SOP
Operations · Owner
View
Integration and API Spec
Technical · Developer
View
Test and QA Plan
Quality · Developer
View