Skills marketing-orchestrator-adarsh

Marketing Orchestrator Skill

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/adarshvmore/marketing-orchestrator-adarsh" ~/.claude/skills/openclaw-skills-marketing-orchestrator-adarsh && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/adarshvmore/marketing-orchestrator-adarsh" ~/.openclaw/skills/openclaw-skills-marketing-orchestrator-adarsh && rm -rf "$T"
manifest: skills/adarshvmore/marketing-orchestrator-adarsh/SKILL.md
source content

Marketing Orchestrator Skill

Purpose

Orchestrates the marketing audit pipeline by sequentially running the following collector agents:

  • Instagram Collector
  • Meta Ads Collector
  • SEO / Keyword Collector
  • Competitor Finder
  • Website Audit Collector

Aggregates the individual results and invokes the Report Generator skill to produce the final comprehensive marketing audit report.

Input Schema

interface MarketingInput {
  instagramHandle?: string;
  websiteDomain?: string;
}

Output Schema

interface MarketingAuditReport {
  reportMarkdown: string;
  rawData: any;
  error?: string;
}

Implementation Pattern

  • Validate input: either
    instagramHandle
    or
    websiteDomain
    is required
  • Sequentially call each collector skill, passing relevant input
  • Collect results in a composite data object
  • Call report-generator skill with the aggregated data
  • Return the final report markdown and raw data

Example Usage

const input = { instagramHandle: 'gymshark', websiteDomain: 'gymshark.com' };
const report = await marketingOrchestrator(input);
console.log(report.reportMarkdown);

Orchestration Logic (Pseudocode)

async function marketingOrchestrator(input: MarketingInput): Promise<MarketingAuditReport> {
  if (!input.instagramHandle && !input.websiteDomain) {
    throw new Error("Either instagramHandle or websiteDomain is required");
  }

  const auditData: any = {
    input,
    collectedAt: new Date().toISOString(),
  };

  if (input.instagramHandle) {
    auditData.instagram = await runSkill('instagram-collector', { handle: input.instagramHandle });
  }

  if (input.websiteDomain) {
    auditData.metaAds = await runSkill('meta-ads-collector', { brandName: input.websiteDomain, domain: input.websiteDomain });
    auditData.keywords = await runSkill('seo-collector', { domain: input.websiteDomain });
    auditData.competitors = await runSkill('competitor-finder', { brandName: input.websiteDomain, domain: input.websiteDomain });
    auditData.websiteAudit = await runSkill('website-audit', { domain: input.websiteDomain });
  }

  const report = await runSkill('report-generator', auditData);

  return {
    reportMarkdown: report.reportMarkdown,
    rawData: auditData,
  };
}

Notes

  • Each runSkill call corresponds to invoking another skill as a sub-agent or subprocess.
  • The calling framework should handle API keys, env vars for external services.
  • Errors in individual collectors should not block the overall orchestration.
  • Extend as needed for additional collectors or data sources.