From tiga-gtm
CRM hygiene and sync operations using the Tiga API. Use this skill whenever the user wants to detect people who changed jobs, fill missing roles or title gaps in CRM accounts, update stale or outdated contacts, clean field formatting, sync data between Tiga and HubSpot/Salesforce, push a Tiga contact into HubSpot, read contacts from a HubSpot list, or add Tiga people to a HubSpot list. Trigger phrases: 'who left their company?', 'are my contacts still current?', 'standardize job titles', 'find missing contacts at my accounts', 'push to HubSpot', 'sync contact to HubSpot', 'pull HubSpot list', 'add people to HubSpot list', or any CRM data quality task. NOT for discovering brand-new contacts outside your CRM (use list-building) and NOT for defining or running general-purpose signals (use signals).
How this skill is triggered — by the user, by Claude, or both
Slash command
/tiga-gtm:crm-opsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Maintain CRM data quality and sync with HubSpot/Salesforce using Tiga signals, enrichment, and CRM integrations.
Maintain CRM data quality and sync with HubSpot/Salesforce using Tiga signals, enrichment, and CRM integrations.
Before starting: Read tiga-gtm/docs/api-reference.md for endpoint details. Read tiga-gtm/docs/merge-fields.md for signal prompt variables. Read tiga-gtm/docs/async-patterns.md for polling patterns.
Related skills: Workflow B (Fill Role/Title Gaps) uses the same Find People Agent + enrich pattern as list-building. Signal creation and run mechanics are covered in depth by the signals skill. For updating CRM records after signal runs, you'll need the OAuth token endpoints documented in tiga-gtm/docs/api-reference.md.
Use when: You want to detect contacts who have changed jobs — either departed their role or started a new one — and update CRM accordingly.
Create movement detection signals:
Role Departure signal:
POST /api/v1/signal
{
"label": "Role Departure Detection",
"is_computed_column": true,
"type": "text",
"computed_config": {
"type": "role_departure",
"is_account_insight": false
}
}
Started New Role signal:
POST /api/v1/signal
{
"label": "Started New Role",
"is_computed_column": true,
"type": "text",
"computed_config": {
"type": "started_new_role",
"is_account_insight": false
}
}
Run signals on your CRM contact list:
curl -X POST "https://app.tigalabs.com/api/v1/lists/<list-id>/run-all-signal" \
-H "X-Tiga-Auth: $TIGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"signal_ids": ["<departure-signal-id>", "<new-role-signal-id>"]}'
Poll for completion via POST /api/v1/lists-signal/bulk-status (polling details: signals skill).
Read results — For each person, check signal values via GET /api/v1/person/:id/signals.
Update CRM — For contacts who moved:
GET /api/v1/current-org/hubspot-oauth-token or GET /api/v1/current-org/salesforce-oauth-tokenaccess_token to update/create records in the CRM via its APIUse when: You have CRM accounts that are missing contacts in key roles (e.g., no VP of Engineering on file).
Identify accounts with gaps — Query people by account, check for missing target roles.
Find missing contacts using Find People Agent:
curl -X POST "https://app.tigalabs.com/api/v1/agent/find-people" \
-H "X-Tiga-Auth: $TIGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contact_description": "<missing role> at <company name>",
"model": "gpt-5.4-2026-03-05"
}'
Poll for results — GET /api/agent/find-people/:id/status until complete.
Enrich found contacts:
curl -X POST "https://app.tigalabs.com/api/v1/people/enrich-person" \
-H "X-Tiga-Auth: $TIGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"first_name": "<first>",
"last_name": "<last>",
"company_name": "<company>",
"person_linkedin_url": "<linkedin>",
"title": "<title>"
}'
Use when: You want to verify that contacts in your CRM still hold their listed roles and re-enrich outdated records.
POST /api/v1/signal
{
"label": "Current Employment Check",
"is_computed_column": true,
"type": "text",
"computed_config": {
"type": "gpt",
"prompt": "Is {{.FirstName}} {{.LastName}} still {{.Title}} at {{.AccountName}}? Check their LinkedIn ({{.LinkedInUrl}}) and recent web mentions. Answer: Current, Changed Role, Left Company, or Unknown.",
"is_account_insight": false,
"can_use_web_search": true,
"word_limit": 40
}
}
Run signal on your contact list and poll to completion (run mechanics: signals skill).
Filter results:
Re-enrich contacts who left — Submit waterfall enrichment with updated company info.
Update CRM via OAuth tokens.
Use when: You want to standardize fields across your CRM data (e.g., normalize titles, fix company name formatting, standardize phone formats).
POST /api/v1/signal
{
"label": "Title Standardization",
"is_computed_column": true,
"type": "text",
"computed_config": {
"type": "gpt",
"prompt": "Standardize this job title to a canonical form: '{{.Title}}'. Rules: expand abbreviations (VP→Vice President), remove special characters, capitalize properly. Return only the standardized title.",
"is_account_insight": false,
"can_use_web_search": false,
"word_limit": 20,
"temperature": 0.1
}
}
Run signal on the list and poll to completion.
Read standardized values from signal outputs.
Update records in Tiga:
curl -X PUT "https://app.tigalabs.com/api/v1/person/<person-id>" \
-H "X-Tiga-Auth: $TIGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "<standardized-title>"}'
Use when: You want to push Tiga people into HubSpot or work with HubSpot lists — using Tiga's native HubSpot endpoints (OAuth, contact matching, and field mapping are handled internally; no direct HubSpot API calls needed).
Full field tables, dedup rules, and response shapes: references/hubspot.md.
curl -X POST "https://app.tigalabs.com/api/v1/hubspot/create-or-update-contact" \
-H "X-Tiga-Auth: $TIGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person_id": "<tiga-person-uuid>", "find_person_by": {"email": true, "linkedin_url": true}}'
Searches HubSpot by email/LinkedIn before creating; response contact_created tells you which happened. There is no batch endpoint — loop per person. hubspot_owner_id is only applied on new-contact creation; sync_account_association: true requires the person to have a Tiga account (else 400).
curl -X GET "https://app.tigalabs.com/api/v1/hubspot/list-members?list_name=My+List+Name" \
-H "X-Tiga-Auth: $TIGA_API_KEY"
list_name must match the HubSpot list name exactly (case-sensitive). Note: account_domain in the response is the HubSpot company name, not a domain.
curl -X POST "https://app.tigalabs.com/api/v1/hubspot/add-to-list" \
-H "X-Tiga-Auth: $TIGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person_ids": ["<tiga-person-uuid>"], "list_name": "My HubSpot List"}'
Requires list_id or list_name. Only MANUAL lists support adds — DYNAMIC lists fail. Response reports added/failed; 400 if none could be added.
npx claudepluginhub tiga-labs/tiga-gtm --plugin tiga-gtmGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.