---
name: "instaloader"
section: "1"
platform: "linux"
package: "instaloader"
version: "4.14.1+ds-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/instaloader"
---

# instaloader(1)

instagram automatic photo downloader

## NAME

**instaloader** - instagram automatic photo downloader

## SYNOPSIS

```
instaloader profile [profile ...]
instaloader --fast-update profile [profile ...]
instaloader --latest-stamps -- profile [profile ...]
```

## DESCRIPTION

**instaloader With it you can download public and private profiles,** **hashtags, user stories, feeds and saved media. As well as comments,** **geotags and captions for each post.**

## OPTIONS

**1.WHAT TO DOWNLOAD**

**1.1** *profile* **Public** *profile***, or private** *profile* **with:**

**option: --login public/private.**

**option: --stories instructs Instaloader to also download the user's** **stories.**

**option: --highlights to download the highlights of that** *profile***.**

**option: --tagged to download posts where the user is tagged.**

**option: --igtv to download IGTV videos.**

**1.2 #hashtag - Posts with a certain hashtag (the quotes are usually necessary).**

**1.3 %location id - Posts tagged with a given location; the location** **ID is the numerical ID Instagram labels a location with**  **(e.g. https://www.instagram.com/explore/locations /362629379/** **plymouth-naval-memorial/). Requires :option:\`--login\`.**

**1.4 :stories - The currently-visible stories of your followees** **(requires :option:\`--login\`).**

**1.5 :feed - Your feed (requires :option:\`--login\`).**

**1.6 :saved - Posts which are marked as saved (requires :option:\`--login\`).**

**1.7 @***profile* **- All profiles that are followed by** *profile***, i.e. the followees** **of** *profile* **(requires :option:\`--login\`).**

**1.8 -post - Replace post with the post's shortcode to download single post.** **Must be preceded by -- in the argument list to not be mistaken as an**  **option flag: instaloader -- -B\_K4CykAOtf .. versionadded :: 4.1**

**Instaloader goes through all media matching the specified targets and** **downloads the pictures and videos and their captions. You can specify**

**1.9 :option:\`--comments\` - also download comments of each post.**

**1.10 :option:\`--geotags\` - download geotags of each post and save them as** **Google Maps link (requires :option:\`--login\`).**

**2.FILENAME SPECIFICATION**

**For each target, Instaloader creates a directory named after the target,** **i.e.** *profile***, #hashtag, %location id, :feed, etc. and therein saves the** **posts in files named after the post's timestamp.**

**option:\`--dirname-pattern\` - allow one to configure the directory name of** **each target. The default is --dirname-pattern={target}. In the dirname** **pattern, the token{target} is replaced by the target name, and {***profile***}** **is replaced by the owner of the post which is downloaded.**

**option:\`--filename-pattern\` configures the path of the post and story's** **files relative to the target directory that is specified with option:** **The default is \`--filename-pattern\`={date\_utc}\_utc. The tokens {target}** **and {***profile***} are replaced like in the dirname pattern.**

**option:\`--title-pattern\` is similar to option:\`--filename-pattern\`, but** **for** *profile* **pics, hashtag** *profile* **pics, and highlight covers. The default** **is {date\_utc}\_UTC\_{typename} if :option:\`--dirname-pattern\` contains** **{target} or {***profile***}, or {target}\_{date\_utc}\_UTC\_{typename} if it does** **not. Some tokens are not supported for this option, see below for details.**

**The following tokens are defined for usage with :option:\`--filename-pattern\`** **and :option:\`--title-pattern\`:**

**2.1 {target} Target name (as given in Instaloader command line)**

**2.2 {***profile***} (same as {owner\_username}) Owner of the Post / StoryItem /** **ProfilePic. For hashtag** *profile* **pics and highlight covers, equivalent to** **{target}.**

**2.3 {owner\_id} Unique integer ID of owner** *profile***. For hashtag** *profile* **pics, equivalent to {target}.**

**2.4 {shortcode} Shortcode (identifier string). Not available** **for :option:\`--title-pattern\`**

**2.5 {mediaid} Integer representation of shortcode. Not available** **for :option:\`--title-pattern\`.**

**2.6 {filename} Instagram's internal filename.**

**2.7 {date\_utc} (same as {date}) Creation time in UTC timezone. strftime** **()-style formatting options are supported as format specifier. The default** **date format specifier used by Instaloader is: {date\_utc:%Y-%m-%d\_%H-%M-%S}**

**2.8 {typename} Type of media being saved, such as GraphImage, GraphStoryVideo,** **profile\_pic, etc.**

**3.FILTER POSTS**

**The options :option:\`--post-filter\` and :option:\`--storyitem-filter\`** **allow one to specify criteria that posts or story items have to meet to be** **downloaded. If not given, all posts are downloaded.**

**The filter string must be a Python boolean expression where the attribute** **from :class:\`Post\` or :class:\`StoryItem\` respectively are defined.**

**the following attributes can be used with both** **option:\`--post-filter\` and option:\`--storyitem-filter\`:**

**3.1 attr:\`~Post.owner\_username\` (str), attr:\`~Post.owner\_id\` (int) Owner** *profile* **username/user ID.**

**3.2 :attr:\`~Post.date\_utc\` (datetime), :attr:\`~Post.date\_local\` (datetime)** **Creation timestamp. Since :class:\`~datetime.datetime\` objects can be created** **inside filter strings, this easily allows filtering by creation date.**

**3.3 :attr:\`~Post.is\_video\` (bool) Whether Post/StoryItem is a video.** **For example, you may skip videos:** **instaloader --post-filter="not is\_video" target**

**This is not the same as :option:\`--no-videos\` and :option:\`--no-video-thumbnails\`,** **since sidecar posts (posts that contain multiple pictures/videos in one post)** **have this attribute set to False.**

**As :option:\`--post-filter\`, the following attributes can be used additionally:**

**3.4 :attr:\`~Post.viewer\_has\_liked\` (bool) Whether user (with :option:\`--login\`)** **has liked given post. To download the pictures from your feed that you have liked:**

**3.5 :attr:\`~Post.likes\` (int), :attr:\`~Post.comments\` (int) Likes count / comments** **count. You might only want to download posts that were either liked by yourself or** **by many others.**

**3.6 :attr:\`~Post.caption\_hashtags\` (list of str) /:attr:\`~Post.caption\_mentions\`** **(list of str) #hashtags or @mentions (lowercased) in the Post's caption.** **For example, to download posts of kittens that are cute:**  **instaloader --post-filter="'cute' in caption\_hashtags" "#kitten"**

**3.7 :attr:\`~Post.tagged\_users\` (list of str) Lowercased usernames that are tagged** **in the Post. For :option:\`--storyitem-filter\`, the following additional attributes** **are defined:**

**3.8 :attr:\`~StoryItem.expiring\_utc\` (datetime) /:attr:\`~StoryItem.expiring\_local\`** **(datetime).Timestamp when StoryItem will get unavailable.**

**4.METADATA TEXT FILES**

**Unless :option:\`--no-captions\` is given, Instaloader creates a .txt file along**  **with each post where the Post's caption is saved.**

**You can customize what metadata to save for each Post or StoryItem with :option:** **\`--post-metadata-txt\` and :option:\`--storyitem-metadata-txt\`. The default is**  **--post-metadata-txt={caption} and no storyitem metadata txt. These strings are**  **formatted similar as the path patterns described in :ref:\`filename-specification** **and the result is saved in text files, unless it is empty.**

**Specifying these options multiple times results in output having multiple lines, in** **the order they were given to Instaloader. The field names are evaluated to :class:** **\`Post\` or :class:\`StoryItem\` attributes, and as such, the same fields are supported** **as in :ref:\`filename-specification\` and :ref:\`filter-posts\`.**

**For example, to save the current number of likes for each post, rather than the** **post's caption:**

**4.1 instaloader --post-metadata-txt="{likes} likes." \<target\>**

**Note that with this feature, it is possible to easily and fastly extract additional** **metadata of already-downloaded posts, by reimporting their JSON files. Say, you now** **also want to export the number of comments the Posts had when they were downloaded:**

**4.2 instaloader --post-metadata-txt="{likes} likes, {comments} comments." \<target\>/\*.json.xz**

## EXAMPLES

**For example, encode the poster's** *profile* **name in the filenames with:**

**instaloader --login=your\_username**

**instaloader --dirname-pattern={***profile***}**

**instaloader --login=your\_username --quiet target \[...\]**

**instaloader --filename-pattern={date\_utc}\_UTC\_{***profile***} "#hashtag"**

**instaloader --post-filter="date\_utc \<= datetime(2018, 5, 31)" target**

**instaloader --post-filter="not is\_video" target**

**instaloader --login=your\_username --post-filter=viewer\_has\_liked :feed**

**As another example, you may instruct Instaloader to store posts in a PROFILE/YEAR/SHORTCODE.jpg directory structure:**

**instaloader --login=your\_username --post-filter="likes\>100 or viewer\_has\_liked"** *profile*

**instaloader --filename-pattern={date\_utc:%Y}/{shortcode} \<target\> ...**

**instaloader --post-filter="'cute' in caption\_hashtags" "#kitten"**

**instaloader --post-metadata-txt="{likes} likes." \<target\>**

**instaloader --post-metadata-txt="{likes} likes, {comments} comments." \<target\>/\*.json.xz**

## REPORTING BUGS

**To report a bug please visit cplay-ng issues tracking system at:** **https://github.com/instaloader/instaloader/issues**

## AUTHORS

**Written by 2016-2020 Alexander Graf \<mail@agraf.me\>** **2016-2020 André Koch-Kramer \<koch-kramer@web.de\>**

**This manual page was written by Josenison F. da Silva** **\<nilsonfsilva@hotmail.com\> for the Debian project** **(but may be used by others).**
