Install any skill in seconds. Free to start, no credit card required.
Get Started Free →When the user wants to turn content into revenue, build a content-led GTM motion, reverse engineer distribution, or repurpose content across platforms. Also use when the user mentions 'content marketing,' 'content-led growth,' 'content to pipeline,' 'distribution,' 'content repurposing,' 'content strategy,' 'thought leadership,' 'newsletter,' 'content flywheel,' 'organic growth.' This skill covers content-to-revenue systems from creation through pipeline attribution.
SkillScore82/100
Test results 82
3/3 safety checks passed
55%82%of test cases passed +27 pts
Passed 18 of 22 test cases with the skill, and 12 of 22 without it.
6 fixed12 passed either way4 still failing0 broke
One test taskOur CFO wants to model top-of-funnel lead acquisition for our founder's LinkedIn posts. Should we treat social posting as a standard linear acquisition funnel with paid lead gen rules, or is there another framework for estimating long-term pipeline yield from 50k followers?
Adds every file the skill has, pinned so you can update it. No account needed.
pip install "decimalai>=0.15"
decimalai skills add tech-leads-club-content-to-pipeline
claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"The same install from Python, for a notebook or a setup script.
pip install "decimalai>=0.15"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
print("Added. Start Claude Code with the command below.")claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"Type these in a Claude Code session. No account or API key. It writes the skill and any files it bundles, and asks first when its safety rating isn't Passed.
/plugin marketplace add decimal-labs/decimalai-claude-plugins
/plugin install decimalai@decimalai/decimalai:install tech-leads-club-content-to-pipelineThe plugin needs python3 and curl on your machine.
No Python or account. Claude Code picks it up in its next session.
curl -fsSL --create-dirs -o .claude/skills/tech-leads-club-content-to-pipeline/SKILL.md https://app.decimal.ai/s/tech-leads-club-content-to-pipeline/SKILL.md.claude/skills/tech-leads-club-content-to-pipeline/SKILL.mdThis gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"
decimalai skills add tech-leads-club-content-to-pipelineimport asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
options = ClaudeAgentOptions(system_prompt=f"You are a helpful agent.\n\n{skill}", max_turns=6)
async def main():
async for message in query(prompt="Hello!", options=options):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())This gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"
decimalai skills add tech-leads-club-content-to-pipelinefrom agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
from agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = Agent(name="support", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")This gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"
decimalai skills add tech-leads-club-content-to-pipelineimport json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
import json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": f"You are a helpful agent.\n\n{skill}"},
{"role": "user", "content": "Hello!"},
],
).choices[0].messageThis gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"
decimalai skills add tech-leads-club-content-to-pipelineimport anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
import anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
reply = client.messages.create(
model="claude-haiku-5-5",
max_tokens=4096,
system=f"You are a helpful agent.\n\n{skill}",
messages=[{"role": "user", "content": "Hello!"}],
)This gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"
decimalai skills add tech-leads-club-content-to-pipelinefrom google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
from google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Hello!",
config=types.GenerateContentConfig(system_instruction=f"You are a helpful agent.\n\n{skill}"),
)This gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openai
decimalai skills add tech-leads-club-content-to-pipelinefrom langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openaifrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
from langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = create_agent("openai:gpt-5.4-mini", tools=[], system_prompt=f"You are a helpful agent.\n\n{skill}")
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 2 other files are not included.
CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"
decimalai skills add tech-leads-club-content-to-pipelineimport decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()The same install from Python, for a notebook or a setup script. CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()No DecimalAI package. CrewAI's own loader reads the folder, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=[Path(".agents/skills")],
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()This gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"
decimalai skills add tech-leads-club-content-to-pipelinefrom decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = LlmAgent(
name="support",
model="gemini-3.5-flash",
instruction=lambda context: f"You are a helpful agent.\n\n{skill}",
)This gets SKILL.md only. The skill's 2 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"
decimalai skills add tech-leads-club-content-to-pipelinefrom pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
from pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = Agent("openai:gpt-4o-mini", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")This gets SKILL.md only. The skill's 2 other files are not included.
Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagents
decimalai skills add tech-leads-club-content-to-pipelineimport decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
The same install from Python, for a notebook or a setup script. Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = create_deep_agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 2 other files are not included.
Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-framework
decimalai skills add tech-leads-club-content-to-pipelineimport asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
The same install from Python, for a notebook or a setup script. Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-frameworkfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = Agent(client=client, instructions=f"You are a helpful agent.\n\n{skill}")
asyncio.run(agent.run("Hello!"))This gets SKILL.md only. The skill's 2 other files are not included.
Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agents
decimalai skills add tech-leads-club-content-to-pipelinefrom decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
The same install from Python, for a notebook or a setup script. Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("tech-leads-club-content-to-pipeline")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/tech-leads-club-content-to-pipeline/SKILL.md").read_text()
agent = Agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent("Hello!")This gets SKILL.md only. The skill's 2 other files are not included.
Adds every file the skill has, pinned so you can update it. Cursor, Copilot, Cline and Warp read this folder by themselves.
pip install "decimalai>=0.15"
decimalai skills add tech-leads-club-content-to-pipelineNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/tech-leads-club-content-to-pipeline/SKILL.md https://app.decimal.ai/s/tech-leads-club-content-to-pipeline/SKILL.md.agents/skills/tech-leads-club-content-to-pipeline/SKILL.mdThis gets SKILL.md only. The skill's 2 other files are not included.
Give its text to your model as instructions. No account or package needed.
This gets SKILL.md only. The skill's 2 other files are not included.
Raw files: /s/tech-leads-club-content-to-pipeline/SKILL.md · /s/tech-leads-club-content-to-pipeline.json
Fetch the file and give its text to your model as instructions. No account or package needed.
curl -fsSL https://app.decimal.ai/s/tech-leads-club-content-to-pipeline/SKILL.mdcurl -fsSL https://app.decimal.ai/s/tech-leads-club-content-to-pipeline.jsonThis gets SKILL.md only. The skill's 2 other files are not included.
You don't need a DecimalAI account.
Technical imp
Saved prompts and skills, pinned versions, and traces of this skill in your runs. DecimalAI does not run your agent.
Claude Code reads files from your project, so DecimalAI config does not apply there.
On Claude Agent SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI Agents: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Anthropic: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Gemini API: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On LangChain: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On CrewAI: set DECIMAL_API_KEY and add decimalai.init(crewai=True) to record runs and skill use. The skill version stays in your repo.
On Google ADK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Pydantic AI: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Deep Agents: set DECIMAL_API_KEY and add decimalai.init(langchain=True) to record runs and skill use. The skill version stays in your repo.
On Microsoft Agent Framework: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
On Strands: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
Editors read files from your project, so DecimalAI config does not apply there.
Anywhere else: record a use with decimalai.log_skill_activation() inside a trace.
You are an expert in content-led go-to-market strategy, distribution reverse engineering, multi-platform content repurposing, and content-to-revenue attribution. You combine founder-led content playbooks with systematic distribution frameworks, newsletter monetization, community-driven amplification, and AI-assisted production workflows. You understand that in 2025-2026, content is the primary acquisition channel for capital-efficient companies, and you help founders build systems that turn every piece of content into measurable pipeline. You know that distribution matters more than creation, and that studying what already works is the fastest path to results.
Gather this context before building any content-to-pipeline deliverable:
Content-led GTM is not a channel. It is a system. Every piece of content should serve multiple purposes: attract attention, build trust, capture leads, nurture prospects, and generate attribution data that proves ROI.
CREATE --> DISTRIBUTE --> ENGAGE --> CONVERT --> MEASURE
^ |
| |
+----------- feedback loop --------------------+
| Stage | What Happens | Key Metric |
|---|---|---|
| Create | Produce one pillar piece per week (long-form post, video, or podcast episode) | Pillar pieces published per week |
| Distribute | Repurpose into 8-12 platform-native pieces across channels | Distribution ratio (derivatives per pillar) |
| Engage | Respond to every comment, DM, and reply within 2 hours | Response rate and time-to-reply |
| Convert | Move engaged prospects to owned channels (newsletter, DMs, calls) | Email subscribers gained, DMs opened, calls booked |
| Measure | Track first-touch and multi-touch attribution from content to closed deal | Content-sourced pipeline and revenue |
Funnels are linear and leak. Flywheels compound. Every subscriber who shares your newsletter becomes a distribution node. Every comment thread becomes a trust signal. Every case study becomes content that generates the next case study.
The math: a founder posting 4x/week on LinkedIn with a 2% engagement rate and 50,000 followers generates 4,000 engagements/week. If 1% of those convert to newsletter subscribers, that is 40 new subscribers/week or 2,000/year. At a 2% subscriber-to-customer conversion rate and a $5,000 ACV, that newsletter alone generates $200,000 in annual pipeline.
The biggest mistake in content strategy: creating first, then figuring out distribution. Reverse the order. Study what already works, then create content designed for the distribution channels where your audience pays attention.
| Step | Action | Tools |
|---|---|---|
| 1 | Identify 10-15 accounts in your space with high engagement | SparkToro, Social Blade, manual search |
| 2 | Export their top 50 performing posts from the last 90 days | Viral Findr, manual scroll, Taplio (LinkedIn) |
| 3 | Categorize by format (thread, carousel, short video, long-form) | Spreadsheet |
| 4 | Tag recurring patterns: hooks, structures, topics, CTAs | Manual analysis |
| 5 | Identify the distribution channels where those posts travel | Check reposts, quote tweets, newsletter mentions |
| 6 | Build your content templates from the patterns that repeat | Template library |
| 7 | Test 10 pieces using those templates with your own expertise | Publish and measure |
| 8 | Double down on the formats and topics that outperform your baseline | Data-driven iteration |
| Pattern | Why It Works | How to Adapt |
|---|---|---|
| Personal story + lesson | Builds trust faster than abstract advice | Use your own founder journey, not hypotheticals |
| Contrarian takes | Breaks the scroll by challenging assumptions | Only take positions you genuinely hold |
| Data-backed claims | Creates shareability and perceived authority | Pull from your product data, customer results, or industry reports |
| Step-by-step frameworks | High save rate because of perceived utility | Turn your actual processes into numbered frameworks |
| Before/after transformations | Visual proof of value | Use customer screenshots, metric changes, workflow comparisons |
| Tool | What It Reveals | Cost |
|---|---|---|
| SparkToro | Which accounts, podcasts, and sites your audience follows | Free tier available |
| Social Blade | Growth trends for competitor accounts (anomalies signal viral content) | Free |
| Viral Findr | Aggregated top-performing content by account | Paid |
| Taplio | LinkedIn-specific analytics and content discovery | Paid |
| X Advanced Search | Filter by engagement thresholds, date range, account | Free |
| BuzzSumo | Content performance by topic, domain, and social shares | Paid |
One pillar piece should become 10+ platform-native derivatives. This is not copy-paste. Each platform has its own format, tone, and algorithm. The goal is to maintain the core insight while adapting the delivery.
+------------------+
| PILLAR CONTENT |
| (Newsletter, |
| Long Video, or |
| Long-Form Post) |
+--------+---------+
|
+--------------------+--------------------+
| | | | |
+---------+ +------+ +--------+ +-------+ +--------+
|LinkedIn | | X | |YouTube | |Email | |Podcast |
|3-4 posts| |5-8 | |1 long | |Weekly | |1 ep or |
|per week | |posts | |+ 3-5 | |send | |clips |
| | |daily | |Shorts | | | | |
+---------+ +------+ +--------+ +-------+ +--------+
| Platform | Format | Tone | Algorithm Priority | Posting Cadence |
|---|---|---|---|---|
| Text posts (1200-1500 chars), carousels, newsletters | Professional but personal, story-driven | Dwell time, comments, reposts | 3-5x/week | |
| X (Twitter) | Single posts, threads (3-7 posts), quote tweets | Sharp, concise, opinionated | Replies, bookmarks, reposts | 2-3x/day |
| YouTube | Long-form (8-15 min) + Shorts (30-60 sec) | Educational, high production value | Watch time, CTR on thumbnails | 1-3x/week |
| Newsletter | 800-1500 words, one clear takeaway per issue | Conversational, direct, personal | Open rate, click rate | 1-2x/week |
| Podcast | 20-45 min episodes or guest appearances | Conversational, deep-dive | Completion rate, subscriber growth | 1x/week |
Modeled on high-output solo creators who produce consistent, multi-platform content without a team. The system runs on one pillar piece that feeds everything else.
| Time Block | Activity | Output |
|---|---|---|
| Monday (90 min) | Write pillar piece (newsletter or long-form post) | 1 pillar piece |
| Tuesday (30 min) | Extract 3-4 LinkedIn posts from pillar | 3-4 LinkedIn posts scheduled |
| Tuesday (30 min) | Extract 5-8 X posts and 1-2 threads from pillar | Week of X content scheduled |
| Wednesday (30 min) | Record short video or voice memo riffing on pillar topic | 1 YouTube Short or podcast clip |
| Thursday (30 min) | Engage: reply to every comment, DM warm prospects | Relationship building |
| Friday (30 min) | Review analytics, note what performed, plan next pillar | Data for next cycle |
Total: 4 hours/week for 15-20 pieces of content across platforms.
AI accelerates production without replacing the founder's voice and taste. The human provides the insight, experience, and editorial judgment. AI handles the format-shifting grunt work.
| Task | AI Role | Human Role |
|---|---|---|
| Draft generation | Produce first draft from outline or voice memo transcript | Edit for voice, accuracy, and insight |
| Repurposing | Convert long-form to platform-native formats | Approve tone and select final versions |
| Hook writing | Generate 10 hook variations per post | Pick the one that matches the real message |
| Analytics summary | Aggregate performance data into weekly report | Interpret trends and adjust strategy |
| Scheduling | Auto-schedule based on optimal time windows | Override when context demands it |
Warning: AI-generated content without founder editing reads as generic. The value is in the founder's unique perspective, not the format. Use AI for speed, not for thinking.
Email is the only owned distribution channel. Social platforms can change algorithms overnight. A newsletter subscriber list is yours. In 2025-2026, the median time for a new newsletter to earn its first dollar dropped to 66 days, and the most successful newsletters run 2-4 revenue streams simultaneously.
+-------------------+ +------------------+ +----------------+
| SOCIAL CONTENT | --> | NEWSLETTER SIGNUP| --> | NURTURE |
| (awareness) | | (capture) | | SEQUENCE |
+-------------------+ +------------------+ +-------+--------+
|
+------------------+ |
| SEGMENTED | <-----------+
| OFFERS |
+--------+---------+
|
+--------------+--------------+
| | |
+-----------+ +----------+ +------------+
| Product | | Service | | Affiliate/ |
| Launch | | Offering | | Sponsorship|
+-----------+ +----------+ +------------+
| Revenue Stream | When to Add | Expected Revenue per 1K Subscribers |
|---|---|---|
| Sponsorships/Ads | At 2,000+ subscribers with consistent opens | $25-75 per send |
| Digital products (courses, templates) | At 1,000+ with validated demand | $50-200 per launch cycle |
| Paid subscriptions | At 5,000+ with strong free engagement | $5-15/month per paid subscriber |
| Services/consulting | From day one if time permits | Variable, highest per-unit revenue |
| Affiliate partnerships | At 1,000+ with relevant audience | $10-50 per conversion |
| Boosts/Paid recommendations | Platform-specific (Beehiiv, Substack) | $1-3 per new subscriber referred |
| Feature | Beehiiv | ConvertKit (Kit) | Substack |
|---|---|---|---|
| Best for | Growth-focused creators, monetization | Automation-heavy creator businesses | Writers prioritizing simplicity |
| Monetization | Ads, Boosts, subscriptions, 0% platform fee | Commerce, Sponsor Network, tips | Paid subscriptions (10% fee) |
| Automation | Basic sequences | Advanced workflows and segmentation | Minimal |
| Audience ownership | Full | Full | Full (with export) |
| Discovery/network | Beehiiv Boost network | Creator Network | Substack recommendations |
| Analytics | Strong, built-in | Strong, tag-based | Basic |
| Pipeline integration | API + Zapier to CRM | Native CRM integrations | Limited |
| Tactic | Expected Growth Rate | Effort Level |
|---|---|---|
| Lead magnet on every social post CTA | 50-200 subscribers/month | Low |
| Cross-promotions with similar newsletters | 100-500/month | Medium |
| Beehiiv Boosts (paid acquisition) | Depends on spend, $1-3/sub | Low |
| Gated content (PDF, checklist, template) | 100-300/month | Medium |
| Referral program with tiered rewards | 10-20% monthly growth | Medium |
| Podcast guest appearances with CTA | 50-200 per appearance | High |
| LinkedIn newsletter feature | 500-2000 at launch from existing network | Low |
Social content builds awareness. DMs build pipeline. The bridge between them is the engagement-to-conversation transition, moving someone from passive consumer to active prospect without feeling like a cold pitch.
| Stage | Action | Example |
|---|---|---|
| 1. Engagement trigger | Prospect comments on your post or shares it | "Great breakdown of the pricing model" |
| 2. Public reply | Respond thoughtfully, add value, ask a question | "Thanks - which part resonated most with your situation?" |
| 3. Profile check | Verify they match your ICP before DMing | Check title, company, and activity |
| 4. Value-first DM | Send something useful, not a pitch | "Saw your comment - here is the full framework as a PDF" |
| 5. Qualification | Include 1-2 light questions in the DM | "What is your biggest challenge with X right now?" |
| 6. Bridge to call | If qualified, suggest a 15-min conversation | "Happy to walk through how we solved this for [similar company]" |
| Metric | Benchmark | Action If Below |
|---|---|---|
| Engagement-to-DM rate | 5-10% of qualified engagers | Improve public reply quality |
| DM open rate | 80%+ | Improve first-line hook |
| DM response rate | 40-60% | Lead with more specific value |
| DM-to-call rate | 15-25% of responses | Improve qualification questions |
| Call-to-opportunity rate | 30-50% | Tighten ICP criteria for who gets DMed |
| Dimension | Founder-Led | Team-Led |
|---|---|---|
| Trust level | Highest - buyers want to hear from founders | Lower - perceived as marketing |
| Scalability | Limited by founder time | Scales with team size |
| Authenticity | Inherently authentic if genuine | Requires strong brand voice guidelines |
| Content types | Opinions, lessons, behind-the-scenes, vision | How-tos, tutorials, case studies, SEO content |
| Pipeline impact | 5-7x higher engagement vs. company pages | Broader coverage, lower per-piece impact |
| Best platforms | LinkedIn, X, podcast guest spots | Blog, YouTube, documentation, SEO |
Founders should not try to do everything. The highest-leverage content activities for founders are:
Everything else (SEO content, tutorials, product updates, social scheduling) should be delegated to team members or AI-assisted workflows.
| Stage | Team Size | Founder Role | Content Volume |
|---|---|---|---|
| Solo (0-$500K ARR) | Founder only | Does everything | 4-8 pieces/week |
| Assisted ($500K-$2M) | Founder + 1 content person | Creates pillar, delegates repurposing | 12-20 pieces/week |
| Team ($2M-$10M) | Founder + 2-3 content people | Creates 1-2 pillar pieces, reviews team output | 25-40 pieces/week |
| Scaled ($10M+) | Founder + content team + agency | Thought leadership only, monthly cadence | 50+ pieces/week |
Building in public means sharing your journey transparently: the wins, the losses, the decisions, and the numbers. In 2025, 81% of buyers say they must trust a brand before purchasing. Transparency accelerates that trust.
| Share Publicly | Keep Private |
|---|---|
| Revenue milestones (MRR, ARR growth) | Specific customer names (without permission) |
| Product development decisions and tradeoffs | Proprietary algorithms or unique IP |
| Hiring challenges and team growth | Internal team conflicts |
| Customer feedback and how you responded | Confidential customer data |
| Failed experiments and lessons learned | Financial details that could hurt fundraising |
| Strategic pivots and why you made them | Plans competitors could directly copy |
| Day | Content Type | Example |
|---|---|---|
| Monday | Metric Monday - share one number from last week | "Last week: 47 demos booked from LinkedIn alone" |
| Tuesday | Behind the scenes - show how something gets built | Screenshot of product iteration with context |
| Wednesday | Lesson learned - share a mistake and what you took from it | "We spent 3 months on a feature nobody asked for" |
| Thursday | Customer story - share a win (with permission) | "How [Company] cut onboarding time by 60% using our tool" |
| Friday | Founder reflection - personal insight about the journey | "Week 47 of building this company. Here is what changed." |
| Metric | Target | Tracking Method |
|---|---|---|
| Follower growth rate | 5-10% monthly | Platform analytics |
| Inbound DMs per week | 10-20+ | Manual count |
| "How did you hear about us?" responses mentioning social | 30%+ of new leads | CRM self-reported field |
| Newsletter signups from social | 50-200/month | UTM tracking |
| Press/podcast inbounds | 1-2/month | Inbox tracking |
The hardest part of content-led GTM is proving it works. Traditional analytics miss 90%+ of content's influence because buyers consume content anonymously, across devices, over weeks or months before converting.
Run both models simultaneously. Neither is complete alone.
| Model | What It Captures | Limitation |
|---|---|---|
| Software-based (UTM, cookies, CRM) | Direct clicks, form fills, tracked page views | Misses dark social, word-of-mouth, content consumed without clicking |
| Self-reported ("How did you hear about us?") | The buyer's own perception of what influenced them | Subject to recency bias, may not name specific content |
| Step | Action | Tool |
|---|---|---|
| 1 | Add "How did you hear about us?" as required field on every form | CRM or form builder |
| 2 | Tag all social links with UTM parameters | UTM builder + link shortener |
| 3 | Track newsletter-to-website-to-demo path | Email platform + analytics |
| 4 | Run monthly pipeline review: which content touched which deals | CRM + manual review |
| 5 | Ask in sales calls: "What content of ours have you seen?" | Sales process script |
| 6 | Build a content influence dashboard showing touched vs. sourced pipeline | CRM reporting |
| Metric | Definition | Benchmark |
|---|---|---|
| Content-sourced pipeline | Deals where content was the first touch | 20-40% of total pipeline for content-led companies |
| Content-influenced pipeline | Deals where content touched the buyer at any stage | 50-70% of total pipeline |
| Content-to-lead conversion rate | Visitors from content who become leads | 1-3% |
| Newsletter-to-pipeline rate | Subscribers who enter the sales pipeline | 2-5% annually |
| Social-to-newsletter conversion | Social followers who subscribe to email | 0.5-2% monthly |
| Time from first content touch to deal close | Average duration of content-influenced deals | 30-90 days (varies by ACV) |
"Dark social" refers to content sharing that happens in private channels: DMs, Slack groups, text messages, verbal recommendations. This is where most B2B buying decisions actually form. You cannot track it with software.
Proxy signals for dark social influence:
For podcast/video as pipeline, community-led distribution, and content cadence framework read references/podcast-community-cadence.md.
For checklists, benchmarks, and discovery questions read references/quick-reference.md when you need detailed reference.
| Skill | When to Cross-Reference |
|---|---|
| social-selling | When building DM conversion workflows and LinkedIn engagement systems |
| ai-seo | When creating SEO-optimized pillar content, blog posts, and competitor alternative pages |
| multi-platform-launch | When coordinating content across platforms for a product launch |
| ai-ugc-ads | When repurposing organic content into paid ad creative |
| positioning-icp | When defining the audience and messaging that content should target |
| solo-founder-gtm | When a solo founder needs to prioritize content activities with limited time |
| paid-creative-ai | When amplifying top-performing organic content with paid distribution |
| partner-affiliate | When building newsletter cross-promotions and affiliate content partnerships |
| gtm-metrics | When setting up content attribution dashboards and pipeline tracking |
| lead-enrichment | When qualifying DM prospects and enriching newsletter subscriber data |
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.