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.