> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trytalkvalue.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recipe: New registrants this week

> Pull the latest event sign-ups, filter by date, and export them as CSV for follow-up.

Pull the people who registered for a specific event recently, optionally filter to this month or this week, then save them as CSV for outreach. The recipe composes [`event list`](/cli/commands/path/event/list), [`event person list`](/cli/commands/path/event/person-list), and [`event person export`](/cli/commands/path/event/person-export) with `jq`.

<Note>
  **Prerequisites:** authenticated CLI (run [`auth login`](/cli/commands/auth/login) once) and at least one event with attendees in the active workspace.
</Note>

## Steps

<Steps>
  <Step title="Find the event ID">
    ```bash theme={null}
    talkvalue path event list --json | jq '.data[] | {id, name, startAt}'
    ```

    Lists every event in the workspace with the three fields you need to pick the one you want.
  </Step>

  <Step title="Browse the latest registrants">
    ```bash theme={null}
    EVENT_ID=18
    talkvalue path event person list "$EVENT_ID" --sort "joinedAt,desc" --page-size 50
    ```

    Prints the 50 most recent registrants as a table, newest first. The `--sort` flag is what makes this a "new registrants" report.
  </Step>

  <Step title="Filter to this month">
    ```bash theme={null}
    EVENT_ID=18
    SINCE=$(date -u +"%Y-%m-01T00:00:00Z")

    talkvalue path event person list "$EVENT_ID" \
      --sort "joinedAt,desc" --page-size 100 --json \
      | jq --arg since "$SINCE" \
          '[.data[] | select(.joinedAt >= $since)]
            | {count: length, registrants: .}'
    ```

    Captures the month boundary at midnight UTC, asks for the first 100 registrants newest first, then keeps only the ones who joined on or after the first of the month. The output is a small object with a `count` plus the filtered list.
  </Step>

  <Step title="Export to CSV for follow-up">
    ```bash theme={null}
    talkvalue path event person export "$EVENT_ID" > "registrants-event-$EVENT_ID.csv"
    ```

    Streams every registrant (not just this month's) as a CSV file. `export` is always CSV regardless of the global `--format` flag.
  </Step>
</Steps>

## Variants

### Filter to a custom date range

```bash theme={null}
SINCE="2026-05-01T00:00:00Z"
UNTIL="2026-05-22T00:00:00Z"

talkvalue path event person list "$EVENT_ID" \
  --sort "joinedAt,desc" --page-size 100 --json \
  | jq --arg since "$SINCE" --arg until "$UNTIL" \
      '[.data[] | select(.joinedAt >= $since and .joinedAt < $until)]'
```

Two ISO timestamps bracket the window. Use any half-open `[since, until)` range for weekly, daily, or arbitrary slices.

### Filter by channel

```bash theme={null}
talkvalue path event person list "$EVENT_ID" \
  --channel-id 7 \
  --sort "joinedAt,desc" --page-size 50
```

Use `--channel-id` (repeatable) when you want only registrants who are also on a specific marketing channel, for example, newsletter subscribers who signed up for the event.

### Export only this month's registrants as CSV

```bash theme={null}
SINCE=$(date -u +"%Y-%m-01T00:00:00Z")

talkvalue path event person list "$EVENT_ID" \
  --sort "joinedAt,desc" --page-size 500 --json \
  | jq -r --arg since "$SINCE" \
      '["id","name","primaryEmail","jobTitle","companyName","joinedAt"],
       (.data[] | select(.joinedAt >= $since) | [.id, .name, .primaryEmail, .jobTitle, .companyName, .joinedAt])
       | @csv' \
  > "new-registrants-$(date +%Y-%m).csv"
```

The `event person export` endpoint always returns every registrant, so this variant projects six columns yourself when you specifically need the month-bounded slice as CSV.

## Tips

* `--page-size` defaults to the server default. Pass `--page-size 100` to fetch more per call. For larger pulls, see the page-walk loop in [Scripting with jq](/cli/recipes/scripting-with-jq).
* `joinedAt` is when the person registered for the event. The CLI returns it as an ISO 8601 UTC timestamp, which sorts lexicographically. `>=` string comparison in `jq` works as expected.
* Pair this with [`person activity`](/cli/commands/path/person/activity) to see the full change log for any specific registrant.

## See also

* [`event person list`](/cli/commands/path/event/person-list). Full filter and pagination reference.
* [`event person export`](/cli/commands/path/event/person-export). CSV stream of every registrant.
* [Recipe: Scripting with jq](/cli/recipes/scripting-with-jq). Projection, aggregation, and pagination patterns.
* [AI agent skill: recipe-new-registrants](/cli/agents/skills). Install as a skill.
