Sequence examples

Three complete Sequence documents. Each passes curviate motion lint with no errors; post one as the sequence of POST /v1/motions with a name, and the Motion's schedule, limits and Accounts take their defaults. See Sequence rules for every check.

Connect and converse

Visit, like a recent post, invite without a note, then two messages after acceptance.

{
  "$schema": "https://docs.curviate.com/schemas/sequence/v1.json",
  "on_reply": "replied",
  "steps": [
    {
      "id": "visit",
      "do": "profile.view",
      "note": "Warm-up visit before any contact."
    },
    {
      "id": "has_post",
      "if": {
        "contact.posted_within": "14d"
      },
      "then": "w_like",
      "else": "w_invite"
    },
    {
      "id": "w_like",
      "wait": "1d"
    },
    {
      "id": "like",
      "do": "post.react",
      "with": {
        "post": "latest",
        "newer_than": "14d",
        "reaction": "like"
      }
    },
    {
      "id": "w_invite",
      "wait": "1d"
    },
    {
      "id": "invite",
      "do": "invite.send",
      "with": {
        "withdraw_after": "21d"
      },
      "note": "No note: blank invites are accepted slightly more often."
    },
    {
      "id": "accepted",
      "until": "invite.accepted",
      "timeout": "21d",
      "then": "w_opener",
      "else": "end"
    },
    {
      "id": "w_opener",
      "wait": "1d"
    },
    {
      "id": "opener",
      "do": "message.send",
      "variants": [
        {
          "id": "opener_named",
          "text": "Hi {{first_name}}, {{opener}}"
        },
        {
          "id": "opener_plain",
          "text": "{{opener}}"
        }
      ],
      "with": {
        "fallback": "Hi, glad we are connected. How do you handle LinkedIn outreach today?"
      },
      "note": "No link in the first message."
    },
    {
      "id": "r_opener",
      "until": "message.replied",
      "timeout": "4d",
      "then": "replied"
    },
    {
      "id": "followup",
      "do": "message.send",
      "with": {
        "text": "{{followup}}",
        "fallback": "Quick follow-up in case this got buried. Happy to leave it here if the timing is off."
      }
    },
    {
      "id": "r_followup",
      "until": "message.replied",
      "timeout": "7d",
      "then": "replied"
    },
    {
      "id": "silent",
      "tag": "no-reply",
      "next": "end"
    },
    {
      "id": "replied",
      "tag": "in-conversation",
      "next": "end"
    }
  ]
}

Engage then connect

React and comment on a recent post, then invite and two messages.

{
  "on_reply": "replied",
  "steps": [
    {
      "id": "react",
      "do": "post.react",
      "with": {
        "newer_than": "60d"
      },
      "else": "w_invite"
    },
    {
      "id": "w_comment",
      "wait": "10m"
    },
    {
      "id": "comment",
      "do": "post.comment",
      "with": {
        "newer_than": "60d",
        "text": "{{comment}}",
        "fallback": "skip"
      },
      "note": "The agent writes one comment per Contact; no product mention."
    },
    {
      "id": "w_invite",
      "wait": "30m"
    },
    {
      "id": "invite",
      "do": "invite.send",
      "with": {
        "withdraw_after": "21d"
      }
    },
    {
      "id": "accepted",
      "until": "invite.accepted",
      "timeout": "21d",
      "then": "w_opener",
      "else": "end"
    },
    {
      "id": "w_opener",
      "wait": "1d"
    },
    {
      "id": "opener",
      "do": "message.send",
      "with": {
        "text": "Hi {{first_name}}, {{opener}}",
        "fallback": "Hi, thanks for connecting. What are you working on at the moment?"
      }
    },
    {
      "id": "r_opener",
      "until": "message.replied",
      "timeout": "5d",
      "then": "replied"
    },
    {
      "id": "followup",
      "do": "message.send",
      "with": {
        "text": "{{followup}}",
        "fallback": "Following up once in case this got buried. All good if now is not the time."
      }
    },
    {
      "id": "r_followup",
      "until": "message.replied",
      "timeout": "7d",
      "then": "replied"
    },
    {
      "id": "silent",
      "tag": "no-reply",
      "next": "end"
    },
    {
      "id": "replied",
      "tag": "in-conversation",
      "next": "end"
    }
  ]
}

Nurture connections

Message existing Connections twice; people not connected are tagged and skipped.

{
  "on_reply": "replied",
  "steps": [
    {
      "id": "is_connected",
      "if": {
        "contact.connected": true
      },
      "then": "dm",
      "else": "not_connected"
    },
    {
      "id": "not_connected",
      "tag": "not-connected",
      "next": "end"
    },
    {
      "id": "dm",
      "do": "message.send",
      "with": {
        "text": "{{dm}}",
        "fallback": "Hi, it has been a while. What are you focused on these days?"
      }
    },
    {
      "id": "r_dm",
      "until": "message.replied",
      "timeout": "5d",
      "then": "replied"
    },
    {
      "id": "seen_dm",
      "if": {
        "message.seen": true
      },
      "then": "followup",
      "else": "end",
      "note": "Follow up only when they saw the first message."
    },
    {
      "id": "followup",
      "do": "message.send",
      "with": {
        "text": "{{followup}}",
        "fallback": "No rush on this, just wanted to check in once more."
      }
    },
    {
      "id": "r_followup",
      "until": "message.replied",
      "timeout": "7d",
      "then": "replied",
      "else": "end"
    },
    {
      "id": "replied",
      "tag": "in-conversation",
      "next": "end"
    }
  ]
}