Growably CRM Workflows
Working Growably (LeadConnector) as the CRM — discovering the IDs the write tools need, upserting contacts, the tag-overwrite trap, opportunities, and the confirm-before-send rule for messages and workflows.
How to work Growably (a LeadConnector / GoHighLevel CRM) without the two traps that bite: clobbering a contact’s tags, and firing customer-facing messages or workflows without confirmation. The pattern is discover the IDs you need, make safe writes, and gate anything outbound.
Signatures are on growably; the broader integration plan is Growably Integration.
Discover IDs first
The write tools need IDs (pipeline, stage, workflow, custom-field) that you
discover through growably_get with the right entity_type:
growably_get(entity_type="pipeline") # pipeline_id + stage_id for opportunities
growably_get(entity_type="workflow") # workflow_id for triggers
growably_get(entity_type="custom_field") # field IDs for contact custom_fields
Do this up front — the create/trigger calls below fail without the right IDs, and they’re not guessable.
Upserting contacts
growably_upsert_contact matches on email/phone: if a contact with that email
or phone exists it’s updated, otherwise created. Safe to call idempotently.
growably_upsert_contact(first_name="Jane", last_name="Doe",
email="jane@acme.com", phone="+15551234567",
tags=["lead"], source="referral",
custom_fields=[{"id": "<field_id>", "value": "..."}])
custom_fields is a list of {"id": ..., "value": ...} — IDs from the
custom_field discovery above.
The tag-overwrite trap
This is the one that surprises people. Don’t change tags through
growably_update’s data — it can overwrite the entire existing tag set. Use
the dedicated tag tool, which adds/removes against the current set:
growably_manage_tags(contact_id="<id>", action="add", tags=["vip"])
growably_manage_tags(contact_id="<id>", action="remove", tags=["cold"])
Notes and opportunities
# A note on the contact's timeline
growably_add_note(contact_id="<id>", body="Called re: renewal, left VM.")
# An opportunity in a pipeline stage (IDs from the pipeline discovery)
growably_create_opportunity(name="Acme renewal", pipeline_id="<pid>",
stage_id="<sid>", contact_id="<id>",
monetary_value=4800, status="open")
status is one of open, won, lost, abandoned.
Outbound actions: confirm first
growably_send_message and growably_trigger_workflow reach real customers and
cannot be recalled. Treat both as gated.
# SMS by default; subject required for Email
growably_send_message(contact_id="<id>", message="...", type="SMS")
# Enroll a contact in a workflow (which may itself send comms)
growably_trigger_workflow(contact_id="<id>", workflow_id="<wid>")
Reading conversations & engagement
growably_get(entity_type="conversation", contact_id="<id>")
growably_get(entity_type="conversation_messages", id="<conversation_id>")
growably_get(entity_type="contact_notes", id="<contact_id>")
Pagination is cursor-based — pass start_after / start_after_id from the
previous response’s meta.
Related pages
- growably — the
growably_*signatures and entity-type map - Growably Integration — the five-phase plan wiring Growably into Leif
- Tools — catalog overview and routing rules