Begin with a bounded page

Call GET /posts with a public username and a count between 1 and 30. Smaller pages are easier to retry and keep request latency predictable.

Read the cursor from the response and pass it to the next request. Stop when the response indicates there are no more items or returns no next cursor.

Deduplicate at storage time

Use the platform post identifier as a unique key in your database. Upsert each page in a transaction so overlapping pages or replayed jobs do not create duplicate records.

Track the collection time separately from the post publication time. This lets you refresh metrics later without changing the original event timestamp.