Skip to main content

concinno-skills-marketing

Marketing / email / form agent skills for Concinno. Native Python REST wrappers — zero vendor SDK dependencies, pure httpx + MIT throughout. Covers the three most common stacks agents hit when automating marketing workflows: Mailchimp (newsletters), Typeform (surveys / lead capture), SendGrid (transactional email).

Status

MVP (0.1.0) — three one-shot tools:

Tool class Platform Underlying transport Licence
MailchimpCampaign Mailchimp httpx (REST v3) MIT
TypeformForm Typeform httpx (REST) MIT
SendGridSend SendGrid httpx (REST v3 Mail) MIT

All three platforms are reached via httpx directly; this package therefore adds zero runtime dependencies beyond httpx (already a Concinno main dep) and Concinno itself.

Install

pip install concinno-skills-marketing

Credentials

Each platform's credentials live under well-known keys in the Concinno CredentialStore, which reads (in order):

  1. Process runtime overrides via CredentialStore.set(...).
  2. Env var CONCINNO_CRED_<UPPER_KEY>.
  3. ~/.concinno/credentials.json.

Mailchimp

Key Env var
mailchimp_api_key CONCINNO_CRED_MAILCHIMP_API_KEY
mailchimp_dc CONCINNO_CRED_MAILCHIMP_DC (optional)

The data-center suffix (e.g. us21) is auto-parsed from the API key's trailing -us21 / -us1 segment when mailchimp_dc isn't provided explicitly.

Typeform

Key Env var
typeform_token CONCINNO_CRED_TYPEFORM_TOKEN

SendGrid

Key Env var
sendgrid_api_key CONCINNO_CRED_SENDGRID_API_KEY

Example ~/.concinno/credentials.json:

{
  "mailchimp_api_key": "abc123def456-us21",
  "typeform_token": "tfp_xxxxxxxxxxxxxxxxxxx",
  "sendgrid_api_key": "SG.xxxxxxxxxxxxxxxx"
}

If a token is missing the tool returns {"error": "no <service> credentials — set via CredentialStore / env"} rather than crashing.

Usage via Concinno ToolRegistry

When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry auto-mounts every marketing tool:

import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"

from concinno.tools.registry import get_default_registry

reg = get_default_registry()
assert {"MailchimpCampaign", "TypeformForm", "SendGridSend"} <= set(
    reg.list_deferred()
)

mc = reg.get("MailchimpCampaign")
mc.call(action="list_campaigns", limit=20)

Direct Python usage

from concinno_skills_marketing import (
    MailchimpCampaign,
    TypeformForm,
    SendGridSend,
)

# Mailchimp: list campaigns, list members, add a subscriber.
MailchimpCampaign().call(action="list_campaigns", limit=20)
MailchimpCampaign().call(action="list_members", list_id="abc123")
MailchimpCampaign().call(
    action="add_member",
    list_id="abc123",
    email_address="subscriber@example.com",
    status="subscribed",
)

# Typeform: read a form definition, list responses, export as CSV.
TypeformForm().call(action="get_form", form_id="Xy7aBc")
TypeformForm().call(
    action="list_responses", form_id="Xy7aBc", page_size=20
)
TypeformForm().call(
    action="export_csv", form_id="Xy7aBc", page_size=100
)

# SendGrid: transactional email.
SendGridSend().call(
    action="send",
    to="user@example.com",
    from_email="noreply@acme.com",
    subject="Welcome!",
    body="Thanks for signing up.",
)

All tools return {"ok": True, ...} or a structured payload on success, or {"error": "..."} on failure — same shape as the other Concinno built-in tools. No exceptions escape the call() surface.

Concurrency

All three tools set is_concurrency_safe = False. Mailchimp enforces per-account concurrency caps (typically 10 simultaneous connections), Typeform applies tenant-scoped rate limits, and SendGrid orders message sends per API key. The Concinno scheduler will honour this automatically.

Safety caps

  • Mailchimp limit clamped to 1000 (API per-page cap).
  • Typeform page_size clamped to 1000 (API per-page cap).
  • Typeform export_csv output capped at 1 MB of CSV bytes.
  • SendGrid body ≤ 1 000 000 chars; attachments list (if supplied) must be already base64-encoded.

Licence

MIT — see LICENSE.

Metadata

Release files for concinno-skills-marketing 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for concinno-skills-marketing 0.1.0
File Size Uploaded
concinno_skills_marketing-0.1.0.tar.gz 43.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for concinno-skills-marketing 0.1.0
File Interpreter ABI Platform
concinno_skills_marketing-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 63.3 kB

Release files / concinno_skills_marketing-0.1.0.tar.gz

Download URL concinno_skills_marketing-0.1.0.tar.gz
Size 43.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6d076e5a561cca17b3fa12844992244f82c12a632337c164e5016d085077632f
BLAKE2b-256 checksum
How to use checksums
6dfb6905af52d01df962079d8ddb17d209995daafb75a9e4db5e61b33463e1c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release files / concinno_skills_marketing-0.1.0-py3-none-any.whl

Download URL concinno_skills_marketing-0.1.0-py3-none-any.whl
Size 20.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a458efacf6c7915faa9a841f964d211c8aa77250bbc39b2eb050ac52c619bf9b
BLAKE2b-256 checksum
How to use checksums
becf57dfe71456b896a801529460806981418508c3bcdd7c6e93254f35340561
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page