← Back to Skills Marketplace
danielfoch

Crm Snail Mail Postgrid

by danielfoch · GitHub ↗ · v0.1.0
cross-platform ⚠ suspicious
266
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install crm-snail-mail-postgrid
Description
Send physical mail from CRM contacts using PostGrid. Use when pulling contacts from GoHighLevel (GHL) or Follow Up Boss (FUB), mapping contact/address fields...
README (SKILL.md)

CRM Snail Mail via PostGrid

Use this skill to run targeted direct-mail outreach from CRM contacts.

Workflow

  1. Pick source: ghl, fub, or pre-exported contact JSON.
  2. Pull and normalize contacts into a common schema.
  3. Filter to records with mailable addresses.
  4. Build personalized message content.
  5. Submit jobs to PostGrid (letters or postcards) with dry-run available.
  6. Return send summary with success/failure per contact.

Script

  • scripts/crm_postgrid_mailer.py Purpose: Pull contacts from GHL/FUB (or load from JSON), normalize fields, render templates, and send to PostGrid.
  • scripts/postgrid_api.py Purpose: Full PostGrid API utility with broad endpoint catalog and call-raw fallback for any documented endpoint.

Environment Variables

  • GHL_API_KEY: GHL API key/token.
  • GHL_BASE_URL (optional): defaults to https://services.leadconnectorhq.com.
  • FUB_API_KEY: Follow Up Boss API key.
  • FUB_BASE_URL (optional): defaults to https://api.followupboss.com/v1.
  • POSTGRID_API_KEY: PostGrid API key.
  • POSTGRID_BASE_URL (optional): defaults to https://api.postgrid.com/print-mail/v1.

Typical Commands

List full PostGrid endpoint catalog included in this skill:

python3 scripts/postgrid_api.py list-endpoints

Call a cataloged PostGrid endpoint:

python3 scripts/postgrid_api.py call contacts.list

Call any PostGrid endpoint directly (full docs coverage fallback):

python3 scripts/postgrid_api.py call-raw GET /letters \
  --base-url https://api.postgrid.com/print-mail/v1

Normalize contacts from FUB to JSON:

python3 scripts/crm_postgrid_mailer.py fetch \
  --provider fub \
  --limit 200 \
  --output /tmp/fub_contacts_normalized.json

Normalize contacts from GHL to JSON:

python3 scripts/crm_postgrid_mailer.py fetch \
  --provider ghl \
  --location-id "$GHL_LOCATION_ID" \
  --limit 200 \
  --output /tmp/ghl_contacts_normalized.json

Dry-run PostGrid payload generation:

python3 scripts/crm_postgrid_mailer.py send \
  --contacts-file /tmp/ghl_contacts_normalized.json \
  --from-json-file references/example_sender_us.json \
  --html-template-file references/example_letter_template.html \
  --mail-route letters \
  --dry-run

Fetch + send in one command:

python3 scripts/crm_postgrid_mailer.py run \
  --provider fub \
  --limit 100 \
  --from-json-file references/example_sender_us.json \
  --html-template-file references/example_letter_template.html \
  --mail-route letters \
  --output /tmp/mail_send_summary.json

Send one ad-hoc mailer from raw address + content:

python3 scripts/crm_postgrid_mailer.py one-off \
  --to-name "Jane Seller" \
  --to-address1 "742 Evergreen Terrace" \
  --to-city "Springfield" \
  --to-state "IL" \
  --to-postal-code "62704" \
  --from-json-file references/example_sender_us.json \
  --content-text "Hi Jane,\
\
I'd love to send you a fresh home valuation this week.\
\
Best,\
Daniel" \
  --mail-route letters \
  --dry-run

Use JSON exported by another GHL/FUB skill:

python3 scripts/crm_postgrid_mailer.py run \
  --contacts-file /tmp/contacts_from_other_skill.json \
  --from-json-file references/example_sender_us.json \
  --html-template-file references/example_letter_template.html \
  --mail-route letters

Data Contract

Normalized contact shape:

  • id
  • first_name
  • last_name
  • full_name
  • email
  • phone
  • address1
  • address2
  • city
  • state
  • postal_code
  • country
  • tags
  • raw

Contacts missing address1, city, state, or postal_code are skipped by default.

Integration Notes

  • If dedicated GHL/FUB skills exist and already return contact JSON, pass that file with --contacts-file and skip API pulling.
  • If APIs change, adjust mapping candidates in scripts/crm_postgrid_mailer.py instead of rewriting workflow.
  • Use --postgrid-route when account-specific PostGrid routes differ from defaults.

PostGrid Safety

  • Start with --dry-run to inspect generated payloads.
  • Keep --max-send during first live run (for example --max-send 10).
  • Include clear campaign metadata using --description.

See references/postgrid-notes.md for route/header assumptions and override strategy.

Usage Guidance
This skill's code matches its description, but take these precautions before installing or running it: 1) The SKILL.md and scripts expect API keys for GoHighLevel, Follow Up Boss, and PostGrid — the registry metadata omitted those; don't assume no credentials are needed. 2) The scripts will transmit contact PII (names, addresses, phone, email) to PostGrid — only provide a PostGrid API key you trust and prefer a dedicated/test account with minimal permissions and spending limits. 3) The postgrid_api exposes a raw-caller and many endpoints (bank accounts, webhooks, campaigns) — avoid using a high-privilege PostGrid key; prefer keys scoped to print-mail only. 4) Start with the provided --dry-run and a small --max-send to validate payloads. 5) If you need assurance, review the included Python files yourself or run them in a controlled environment with test credentials. The metadata omission lowers confidence in packaging hygiene; if possible ask the publisher to correct registry env declarations.
Capability Analysis
Type: OpenClaw Skill Name: crm-snail-mail-postgrid Version: 0.1.0 The skill bundle provides a legitimate integration for sending physical mail via PostGrid using contact data from GoHighLevel (GHL) or Follow Up Boss (FUB). The scripts (crm_postgrid_mailer.py and postgrid_api.py) use standard Python libraries for HTTP requests and handle sensitive API keys through environment variables or command-line arguments as expected for this type of integration. No evidence of data exfiltration, malicious execution, or prompt injection was found; the code is transparent, well-documented, and includes safety features like dry-run modes.
Capability Assessment
Purpose & Capability
Name, description, SKILL.md, and included scripts are coherent: the Python tools fetch contacts from GHL or FUB, normalize addresses, render templates, and submit jobs to PostGrid. However, registry metadata declares no required environment variables while SKILL.md and the code clearly expect GHL/FUB/POSTGRID API keys (metadata omission).
Instruction Scope
Runtime instructions stay within the advertised workflow (fetch/normalize/filter/render/send). They explicitly allow loading external JSON contact files and include a 'call-raw' capability to invoke arbitrary PostGrid endpoints. That fall-back is powerful and will transmit contact PII to external PostGrid endpoints (intended) — so it's within purpose but expands what the agent can do beyond only sending letters/postcards.
Install Mechanism
No install spec (instruction-only with bundled Python scripts). Nothing is downloaded from third-party URLs and no new binaries are installed by the skill itself.
Credentials
The code and SKILL.md require GHL_API_KEY, FUB_API_KEY, POSTGRID_API_KEY and optional base URLs, which are appropriate for the task. The registry metadata, however, lists no required env vars/credentials — an inconsistent/omitted declaration that could mislead users into running the skill without realizing it needs sensitive API keys. Also, the included PostGrid helper can call many endpoints (bank account, webhooks, campaigns, etc.), so you should use minimally-scoped PostGrid credentials.
Persistence & Privilege
The skill is not forced-always and does not request persistent system privileges. It does not modify other skills' configs or ask for system-wide credentials.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install crm-snail-mail-postgrid
  3. After installation, invoke the skill by name or use /crm-snail-mail-postgrid
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.0
crm-snail-mail-postgrid v0.1.0 – Initial release - Enables sending personalized physical mail (letters or postcards) from CRM contacts via PostGrid. - Supports contacts from GoHighLevel (GHL), Follow Up Boss (FUB), or pre-exported JSON files. - Normalizes, filters, and processes contact data to generate and submit mail jobs. - Includes dry-run capability for payload inspection and real send limiting for safer operations. - Provides command-line utilities for mail job creation, template rendering, direct API calls, and contact exporting. - Detailed environment variable and usage instructions included for all core workflows.
Metadata
Slug crm-snail-mail-postgrid
Version 0.1.0
License
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Crm Snail Mail Postgrid?

Send physical mail from CRM contacts using PostGrid. Use when pulling contacts from GoHighLevel (GHL) or Follow Up Boss (FUB), mapping contact/address fields... It is an AI Agent Skill for Claude Code / OpenClaw, with 266 downloads so far.

How do I install Crm Snail Mail Postgrid?

Run "/install crm-snail-mail-postgrid" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Crm Snail Mail Postgrid free?

Yes, Crm Snail Mail Postgrid is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Crm Snail Mail Postgrid support?

Crm Snail Mail Postgrid is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Crm Snail Mail Postgrid?

It is built and maintained by danielfoch (@danielfoch); the current version is v0.1.0.

💬 Comments