Download Pictures from Instagram

Basic Usage

To download all pictures and videos of a profile, as well as the profile picture, do

instaloader profile [profile ...]

where profile is the name of a profile you want to download. Instead of only one profile, you may also specify a list of profiles.

To later update your local copy of that profiles, you may run

instaloader --fast-update profile [profile ...]

If --fast-update is given, Instaloader stops when arriving at the first already-downloaded picture. When updating profiles, Instaloader automatically detects profile name changes and renames the target directory accordingly.

Instaloader can also be used to download private profiles. To do so, invoke it with

instaloader --login=your_username profile [profile ...]

When logging in, Instaloader stores the session cookies in a file in your temporary directory, which will be reused later the next time --login is given. So you can download private profiles non-interactively when you already have a valid session cookie file.

What to Download

Instaloader supports the following targets:

Public profile, or private profile with --login. For each profile you download, --stories instructs Instaloader to also download the user’s stories.
Posts with a certain hashtag (the quotes are usually neccessary),
The currently-visible stories of your followees (requires --login),
Your feed (requires --login),
Posts which are marked as saved (requires --login),
All profiles that are followed by profile, i.e. the followees of profile (requires --login).

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

  • --comments, to also download comments of each post,
  • --geotags, to download geotags of each post and save them as Google Maps link,
  • --metadata-json, to store further post metadata in a separate JSON file.

Filename Specification

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

--dirname-pattern allows 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.

--filename-pattern configures the path of the post’s files relative to the target directory. The default is --filename-pattern={date}. The tokens {target} and {profile} are replaced like in the dirname pattern. Further, the tokens {date}, {date_utc} and {shortcode} are defined. Additionally, in case of not downloading stories, the attributes of Post can be used, e.g. {post.owner_id} or {post.mediaid}.

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

instaloader --filename-pattern={date}_{profile} "#hashtag"

The pattern string is formatted with Python’s string formatter. This gives additional flexibilty for pattern specification. For example, strftime-style formatting options are supported for the post’s timestamp. The default for {date} is {date:%Y-%m-%d_%H-%M-%S}.

Filter Posts

The --only-if option allows to specify criterias that posts have to meet to be downloaded. If not given, all posts are downloaded. It must be a boolean Python expression where the variables likes, comments, viewer_has_liked, is_video, and many more are defined.

A few examples:

To download the pictures from your feed that you have liked:

instaloader --login=your_username --only-if=viewer_has_liked :feed

Or you might only want to download posts that either you liked or were liked by many others:

instaloader --login=your_username --only-if="likes>100 or viewer_has_liked" profile

Or you may skip videos:

instaloader --only-if="not is_video" target

Or you may filter by hashtags that occur in the Post’s caption. For example, to download posts of kittens that are cute:

instaloader --only-if="'cute' in caption_hashtags" "#kitten"

The given string is evaluated as a Python boolean expression, where all occuring variables are attributes of the Post class.

Next Section

Command Line Options