Trigger Ideas — Platform Data (No New Integrations)
These triggers are driven entirely by data Leadmetrics already collects. No external APIs or new channel connections required.
1. Organic Search Ranking Milestone
Signal: A tracked keyword first enters the top 10, top 5, or #1 position in Google Search Console data.
Post angle: “We’re now ranking #[N] for [keyword] — here’s what got us there” — educational, behind-the-scenes, builds authority.
Why it works: Reaching a ranking milestone is a genuine business win. Sharing it builds brand credibility and is highly relevant to the audience who cares about that topic.
Automation level: Fully automatic — the GSC sync already runs weekly; a threshold check in the goal-tracker worker or a standalone scheduler handler can catch rank changes.
Dedup window: Once per keyword per ranking tier (don’t fire again until the next tier is crossed).
Data source: GoalSnapshot + GSC channel sync (existing).
Implementation sketch:
- Add a
RankMilestonecheck in thegoal-trackerworker after each GSC snapshot - Tiers: top-10, top-5, top-3, #1
- Fire
enqueueNotification()withtemplateSlug: "rank-milestone"+ keyword, position, date - Surface in dashboard “Suggested Posts” widget + DM portal
contentType: "rank_milestone"in social-post-writer prompt → proud but educational tone
SCENE_MAP entry: Clean minimalist design with an upward trend graphic or search results mockup, brand colours, bold rank number as the hero element.
2. Published Blog Post — Auto Social Series
Signal: A BlogPost transitions to client_approved status.
Post angle: Per-platform teaser posts — hook + 3 key takeaways + link. Different format per platform (LinkedIn = long-form insight excerpt; Instagram = carousel of takeaways; Facebook = story + link; X = thread).
Why it works: Most published blog posts get zero social promotion because it’s manual work. Automating this immediately multiplies the reach of every piece of content produced.
Automation level: Fully automatic — hook into the blog approval server action.
Dedup window: Once per blog post, per platform.
Data source: BlogPost model (existing); ContentRepurposer worker already exists.
Implementation sketch:
- In
clientApproveBlogPostserver action (or equivalent), after status update: callenqueueContentRepurposerfor each platform in the tenant’s connected channels - The content-repurposer worker already knows how to generate platform-specific variants from a source article
contentType: "blog_promotion"→ writer prompt emphasises teaser + link back; includes article title + summary in context- Alternatively: create one
social_postper connected platform, all queued together
SCENE_MAP entry: Editorial blog graphic — featured image or typographic composition, article title as headline, subtle “Read more” CTA, professional content-marketing aesthetic.
3. Contact / Subscriber List Milestone
Signal: Total contact count in the tenant’s Contact table crosses a round-number threshold (500 → 1K → 2.5K → 5K → 10K → 25K → 50K → 100K).
Post angle: “We’ve hit [N] subscribers — thank you! Here’s what’s coming next for our community.”
Why it works: Community milestones feel authentic and inclusive. They reward existing subscribers and make prospective followers feel they’re joining something valuable.
Automation level: Fully automatic — daily scheduler count check.
Dedup window: Once per threshold (fire at 1K, not again until 2.5K).
Data source: db.contact.count({ where: { tenantId } }) — no new model needed.
Implementation sketch:
- New scheduler handler
contact-milestone.ts— daily check - Store last-notified threshold in a
PlatformSetting-style key per tenant (e.g.lastContactMilestone__<tenantId>) - Threshold sequence: [500, 1000, 2500, 5000, 10000, 25000, 50000, 100000]
contentType: "community_milestone"→ warm, grateful tone; hints at upcoming value
SCENE_MAP entry: Celebratory community graphic — bold milestone number, confetti or radial burst element, warm brand palette, “Thank you” messaging.
4. High-Performing Historical Post Recycling
Signal: A SocialPost from exactly 11–13 months ago that has a seoScore above threshold, or was manually marked as “evergreen” by the DM, or received above-average engagement in its original run.
Post angle: “One year ago we shared [post topic] — it’s more relevant than ever. Updated take:” or a straight reshare with “Throwback:” framing.
Why it works: Evergreen content compounds. Most social posts are seen by <10% of followers. Resharing high-value posts expands reach, fills calendar gaps, and costs near-zero to produce.
Automation level: AI flags candidates → human selects which to recycle → auto-generates refreshed version.
Dedup window: Max once per original post, minimum 11 months after original publish date.
Data source: SocialPost model; seoScore field (from seo-optimizer); createdAt for age filter.
Implementation sketch:
- Weekly scheduler handler: find
SocialPostwherecreatedAtis 11–13 months ago AND (seoScore > 70ORisEvergreen = true) - Add
isEvergreen Boolean @default(false)toSocialPostmodel (DM toggle on post detail) - Surface as “Content Worth Revisiting” in DM portal — not auto-published, always needs DM review
- Writer prompt: given original body text, produce refreshed version with updated stats/angle if available
SCENE_MAP entry: Same as the original post type’s scene, but with a subtle “Revisited” or “Updated” visual treatment if feasible.
5. Google Business Profile Review Milestone
Signal: GBP review count crosses round numbers (100, 500, 1K) or the average rating rises above 4.5 for the first time.
Post angle: “500 reviews in — thank you! Here’s what we hear most from customers: [top theme].” The AI can pull common themes from recent review text.
Why it works: Social proof is powerful. A post celebrating reviews encourages more reviews, builds trust with cold audiences, and gives the brand a reason to publish without being promotional.
Automation level: Fully automatic for count milestones; the rating threshold may need a one-time manual flag if GBP doesn’t return rating history.
Dedup window: Once per threshold tier.
Data source: ConnectedChannel (Google Business Profile) + GBP insight worker (existing).
Implementation sketch:
- Extend
channel-score-explanationworker or add a GBP-specific insight check - Query GBP API for
totalRatingCount+averageRatingafter each sync - Store
lastReviewMilestoneinConnectedChannel.metadataJSON - Writer gets review count + top positive phrases from recent reviews as context → grateful, testimonial-style post
SCENE_MAP entry: Trust/social-proof graphic — star rating displayed prominently, brand colours, customer-first warm tone, “Thank you” messaging.
6. Goal Conversion Milestone
Signal: A tenant’s GoalSnapshot shows the cumulative conversion count (leads, sales, signups) crossing a tracked milestone (first 10, 100, 500, 1000, 5000).
Post angle: “We’ve helped [N] [customers/clients/patients/students] [achieve goal]. Here’s how — and why it matters to us.” Story-led, impact-focused.
Why it works: Proof of results is the strongest marketing signal. Automating a milestone post turns every 100th conversion into a piece of brand content with no extra effort.
Automation level: Fully automatic — the goal-tracker worker already runs weekly snapshots.
Dedup window: Once per milestone per goal.
Data source: GoalSnapshot.value (existing); Goal.name + Goal.metric for context.
Implementation sketch:
- In
goal-trackerworker, after recording a snapshot: check ifcurrentValuecrossed a milestone threshold thatpreviousValuehadn’t - Milestones: [10, 50, 100, 250, 500, 1000, 5000, 10000]
- Fire
enqueueNotification()+ surface in dashboard/DM - Writer prompt: goal name, metric type, milestone number, tenant brand voice → proud, impact-driven post
- Optionally include “what made this possible” angle (pulls from Strategy if available)
SCENE_MAP entry: Achievement/impact graphic — bold milestone number as hero, supporting stat or outcome, upward momentum visual, brand colours.