Skip to content

Opportunities

Opportunities are the core pipeline/deal object in PR Tracker. They represent a pitch, placement, or other PR engagement moving through a defined set of stages.

Pipeline Stages

Opportunities progress through these stages in order:

  1. researching -- Identifying the opportunity
  2. drafting -- Preparing the pitch
  3. pitched -- Pitch sent
  4. responded -- Got a response
  5. in_progress -- Actively being worked on
  6. placed -- Confirmed placement
  7. published -- Live/published
  8. won -- Terminal success state
  9. lost -- Terminal failure state

Priority Levels

  • high
  • medium
  • low

create_opportunity

Create a new opportunity. If no campaign_id is provided, the opportunity is assigned to the default "General" campaign.

Parameters

ParameterTypeRequiredDescription
titlestringYesOpportunity title
descriptionstringNoDescription
campaign_idstring (UUID)NoCampaign ID (defaults to General)
channel_idstring (UUID)NoTarget channel
outlet_idstring (UUID)NoTarget outlet
stagestringNoInitial stage (default: researching)
prioritystringNohigh, medium, or low
target_datestringNoTarget date (YYYY-MM-DD)
notesstringNoFree-form notes
next_actionstringNoNext concrete step needed (e.g. "Send pitch to Sarah", "Follow up Tuesday")
next_action_datestringNoWhen the next action is due (YYYY-MM-DD)
next_action_ownerstringNoName of the team member who owns this action

Example

json
{
  "name": "create_opportunity",
  "arguments": {
    "title": "TechCrunch feature on v3 launch",
    "outlet_id": "550e8400-e29b-41d4-a716-446655440000",
    "priority": "high",
    "target_date": "2026-05-15",
    "next_action": "Send pitch to Sarah",
    "next_action_date": "2026-04-10",
    "next_action_owner": "Alex"
  }
}

get_opportunity

Get an opportunity by ID with all linked entities (campaign, channel, outlet, contacts, coverage, email threads).

Parameters

ParameterTypeRequiredDescription
idstring (UUID)YesOpportunity ID

Example

json
{
  "name": "get_opportunity",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

list_opportunities

List opportunities with optional filters.

Parameters

ParameterTypeRequiredDescription
campaign_idstring (UUID)NoFilter by campaign
stagestringNoFilter by stage
prioritystringNoFilter by priority: high, medium, low
outlet_idstring (UUID)NoFilter by outlet
include_archivedbooleanNoInclude archived opportunities (default: false)
limitnumberNoMax results (default: 50)
offsetnumberNoOffset for pagination (default: 0)

Example

json
{
  "name": "list_opportunities",
  "arguments": {
    "stage": "pitched",
    "priority": "high"
  }
}

update_opportunity

Update opportunity fields. For stage changes, use set_opportunity_stage or advance_opportunity instead.

Parameters

ParameterTypeRequiredDescription
idstring (UUID)YesOpportunity ID
titlestringNoTitle
descriptionstringNoDescription
campaign_idstring (UUID)NoCampaign ID
channel_idstring (UUID)NoTarget channel
outlet_idstring (UUID)NoTarget outlet
prioritystringNohigh, medium, or low
target_datestringNoTarget date (YYYY-MM-DD)
notesstringNoFree-form notes
next_actionstringNoNext concrete step needed
next_action_datestringNoWhen the next action is due (YYYY-MM-DD)
next_action_ownerstringNoName of the team member who owns this action

Example

json
{
  "name": "update_opportunity",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "priority": "high",
    "next_action": "Follow up on pitch",
    "next_action_date": "2026-04-14"
  }
}

set_opportunity_stage

Set an opportunity to any stage. Sends a Slack notification if configured.

Parameters

ParameterTypeRequiredDescription
idstring (UUID)YesOpportunity ID
stagestringYesNew stage

Example

json
{
  "name": "set_opportunity_stage",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "stage": "placed"
  }
}

advance_opportunity

Move an opportunity to the next stage in the pipeline. Sends a Slack notification if configured. Returns an error if the opportunity is already at a terminal stage (won or lost).

Parameters

ParameterTypeRequiredDescription
idstring (UUID)YesOpportunity ID

Example

json
{
  "name": "advance_opportunity",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

list_opportunities_by_stage

Get all active opportunities at a given stage.

Parameters

ParameterTypeRequiredDescription
stagestringYesStage to filter by

Example

json
{
  "name": "list_opportunities_by_stage",
  "arguments": {
    "stage": "pitched"
  }
}

get_opportunity_pipeline

Full pipeline view with counts and opportunities grouped by stage. Takes no parameters.

Parameters

None.

Example

json
{
  "name": "get_opportunity_pipeline",
  "arguments": {}
}

Response Shape

Pipeline: researching: 3, drafting: 2, pitched: 5, responded: 1, in_progress: 3, placed: 0, published: 2, won: 1, lost: 0

{
  "researching": [...],
  "drafting": [...],
  ...
}

list_next_actions

List all open opportunities that have a next action defined, grouped by owner. Answers the question: "What needs to happen next across all our opportunities?"

Excludes opportunities in terminal stages (won, lost, published).

Parameters

ParameterTypeRequiredDescription
ownerstringNoFilter by action owner name
overdue_onlybooleanNoOnly show actions past their due date (default: false)

Example

json
{
  "name": "list_next_actions",
  "arguments": {
    "overdue_only": true
  }
}

Response Shape

json
{
  "total_actions": 8,
  "by_owner": {
    "Alex": [{ "id": "...", "title": "...", "next_action": "...", "next_action_date": "..." }],
    "(unassigned)": [...]
  }
}

Add a contact to an opportunity.

Parameters

ParameterTypeRequiredDescription
opportunity_idstring (UUID)YesOpportunity ID
contact_idstring (UUID)YesContact ID
rolestringNoTheir role (e.g. "editor", "pitch target")

Example

json
{
  "name": "link_opportunity_contact",
  "arguments": {
    "opportunity_id": "550e8400-e29b-41d4-a716-446655440000",
    "contact_id": "660e8400-e29b-41d4-a716-446655440000",
    "role": "pitch target"
  }
}

Remove a contact from an opportunity.

Parameters

ParameterTypeRequiredDescription
idstring (UUID)Yesopportunity_contact record ID

Example

json
{
  "name": "unlink_opportunity_contact",
  "arguments": {
    "id": "770e8400-e29b-41d4-a716-446655440000"
  }
}

archive_opportunity

Soft-delete an opportunity.

Parameters

ParameterTypeRequiredDescription
idstring (UUID)YesOpportunity ID

Example

json
{
  "name": "archive_opportunity",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

restore_opportunity

Restore an archived opportunity.

Parameters

ParameterTypeRequiredDescription
idstring (UUID)YesOpportunity ID

Example

json
{
  "name": "restore_opportunity",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}