Output
One row per post, written to your dataset. Every field below is always present — optional ones come back as null rather than disappearing, so a missing value never breaks your schema.
| Field | Meaning |
|---|---|
shortcodestring · always present |
Instagram's own short code for the post. Unique, and the key this actor deduplicates on. |
urlstring · always present |
The canonical post URL, built from the shortcode. |
takenAtstring · always present |
When the post was published, ISO 8601 in UTC. |
takenAtTimestampinteger · always present |
The same instant as epoch seconds, so a row sorts and compares without parsing. |
captionstring or null |
The caption text, or null when the post has none. |
hashtagsarray of string |
Every hashtag in the caption, lowercased and deduplicated, without the leading #. |
likeCountinteger or null |
Likes at the time of reading. Null means the count was not available — never confuse it with 0, which means zero likes. |
commentCountinteger or null |
Comments at the time of reading. Null and 0 mean different things, as above. |
ownerUsernamestring or null |
The account that posted, or null when Instagram did not return it. |
mediaTypestring — one of image, video, carousel, unknown |
What the post is. In practice the hashtag feed serves images and carousels; see the note under this table. |
isVideoboolean |
True only for a standalone video post. See the note under this table before filtering on it. |
containsVideoboolean |
True when the post is a video or is a carousel with at least one video slide. This is the field to filter on. |
carouselCountinteger or null |
How many items the carousel holds, or null when the post is not a carousel. |
displayUrlstring or null |
The largest still image the feed offered — for a carousel, its cover image. Null when none was available. |
Filtering for video: use containsVideo
Instagram's hashtag feed serves images and carousels. A standalone video post does not appear on it — but a carousel can contain a video slide.
So isVideo, which means "this post is a standalone video", is effectively always false here. Filtering on it will find nothing and read as "this hashtag has no video", which is not what it means. containsVideo is the field that answers the question — it is true when the post is a video or holds a video slide.
Each row carries the carousel's cover image in displayUrl; individual slide URLs are not returned.
Null is not zero
likeCount and commentCount come back as null when the count was not available, and as a number — including 0 — when it was. A post whose count is hidden and a post with no likes are different facts, and collapsing them into 0 would silently corrupt any average you compute.
Billing follows this table
A row is charged once it has been written to your dataset, at $0.0005 each. Rows rejected as duplicate, out-of-window, past your limit or unreadable never reach the dataset and are never charged — the run reports how many of each it dropped.