Activity Types
An activity type is the kind of deliverable an agent produces for a tenant during a monthly execution cycle. The deliverable planner selects which types to include based on the tenant’s plan tier, connected channels, and strategy goals. The activity planner then schedules individual activities (one per deliverable) for each period.
All Types
| Type | Label | Agent Queue | Plan | Credits/unit | Monthly Range |
|---|---|---|---|---|---|
backlinks | Backlink Research | backlink-researcher | Pro | 1 | 1 |
blog_post | SEO Blog Post | blog-writer | Free+ | 2 | 2–8 |
content_brief | SEO Content Brief | content-brief-writer | Free+ | 1 | 1 per blog_post |
gbp_post | GBP Post | gbp-post-writer | Free+ | 1 | 4–12 |
keyword_cluster | Keyword Research Cluster | keyword-researcher | Free+ | 1 | 1 |
social_post | Social Media Post | social-post-writer | Free+ | 1 | 8–30 |
social_calendar | Social Media Calendar | social-calendar-planner | Free+ | 1 | 1 |
email_newsletter | Email Newsletter | email-writer | Free+ | 2 | 1–4 |
landing_page | Landing Page Copy | landing-page-writer | Pro | 3 | 0–2 |
google_ads_copy | Google Ads RSA Set | google-ads-writer | Pro | 2 | 1–3 |
meta_ads_copy | Meta Ads Copy Set | meta-ads-writer | Pro | 2 | 1–3 |
monthly_report | Monthly Performance Report | report-writer | Pro | 2 | 1 |
HITL Gate Summary
| Type | DM Gate | Client Gate | Auto-approve |
|---|---|---|---|
backlinks | Yes — campaign ready for outreach (→ /seo/link-building) | — | No |
blog_post | Yes — copy review | Yes — final approval | No |
social_post | Yes — copy review + design sign-off | Yes — final approval | No |
content_brief | — | — | Yes |
gbp_post | — | — | Yes |
keyword_cluster | — | — | Yes |
social_calendar | — | — | Yes |
email_newsletter | — | — | Yes |
landing_page | — | — | Yes |
google_ads_copy | — | — | Yes |
meta_ads_copy | — | — | Yes |
monthly_report | — | — | Yes |
Dependency Graph
keyword_cluster
└──→ content_brief
└──→ blog_post
social_calendar
└──→ social_post (each slot)All other types are independent.
Key Rules
blog_postalways requires a pairedcontent_brief— planner includes 1 brief per blog post.social_postalways requires a pairedsocial_calendar— planner includes 1 calendar per month if social posts are planned.google_ads_copyandmeta_ads_copyrequire the corresponding ad platform to be listed in the tenant’s connected channels.social_postandsocial_calendardo not require connected channels — content is drafted first, published once channels are connected.- Free-tier types: all types except
landing_page,google_ads_copy,meta_ads_copy,monthly_report.
Data Model
Note: backlinks activities create a Campaign record (via Campaign.activityId). The Campaign→Activity link is a raw String field with no Prisma @relation — always query db.campaign.findFirst({ where: { activityId } }) separately; you cannot eager-load it via include.
Data Model
Each activity type maps to these database records:
| Record | Purpose |
|---|---|
DeliverableTemplate | Monthly quota for a type (e.g., “4 blog posts/month”) — created by deliverable-planner |
Activity | A single execution task queued to an agent — created by activity-planner |
Deliverable | Client-facing status record linking the activity to the content output — created by activity-planner |
| Content record | Type-specific record (e.g., BlogPost, SocialPost) — created by the content agent worker |
Plan Tier Map
| DB plan name | Tier |
|---|---|
starter | 0 (free) |
growth | 0 (free) |
professional | 1 (pro) |
Defined in packages/agents/src/workers/strategy.worker.ts → PLAN_TIER.