DEV Community 👩‍💻👨‍💻

Cover image for Create an Instagram downloader API with Nodejs

Posted on

Create an Instagram downloader API with Nodejs

Hi, I'm Hossein, In this article, I'll show you how to create your Nodejs Instagram photo and image downloader.
To start our project we need to install dependencies:
npm init
npm install node-html-parser axios

After installation dependencies have done, Create an index.js file and put the codes below into it:

const axios = require('axios');
const { parse } = require("node-html-parser");

const instagramPostLink = "";

async function getPostLink(url) {

  url = url + 'embed' + '/captioned';

  let res = axios.get(url).then(async (response) => {
    const root = parse(;

    let link = "";
    if ("video_url") != -1)
      link = getVideoLinkFromHtml(;
      link = root.querySelector('img.EmbeddedMediaImage').getAttribute("src");

    while ("&") != -1) {
      link = link.replace("&", "&");
    let caption =await getCaptionFromHtml(;

    return {link,caption};


  return res;


async function getCaption(url) {

  url = url + 'embed' + '/captioned';

  let res = axios.get(url).then((response) => {

    let caption= getCaptionFromHtml(;

    return caption;


  return res;


async function getCaptionFromHtml(html) {

  const root = parse(html);

  let caption=root.querySelector('.Caption')?.text;
  if(caption == undefined)
      caption="No caption";

  caption=caption.replace("view all comments","");
  return caption;


function getVideoLinkFromHtml(html) {
  let crop = "{\"" + html.substring("video_url"),"video_url") + 1000);

  crop = crop.substring(0,",")) + "}";

  return JSON.parse(crop).video_url;

(async ()=>{
    await getPostLink(instagramPostLink);

Enter fullscreen mode Exit fullscreen mode

Some trouble with download the Instagram app is it needs a login, So we are use the embed Instagram posts to download that.
And Instagram can't block this way, Because so many sites use that.

Do you like to create animated emojis for your website? Click this link.

Top comments (12)

downloader2x profile image
MR adama • Edited on

Instagram used to be a straight forward app. Post a photo, and carry on. Now it's a feed of stories, nearly redundant to Reels, with ads every second Story you scroll through. Instagram stories downloader

Sloan, the sloth mascot
Comment deleted
iabhishekrajpoot profile image
iabhishekrajpoot • Edited on

we cant able too get video urls for some links like that one:

only thumbnail image was returned.
And some of the websites like can able do to so.

hackerrsites profile image
hackerrsites • Edited on

This api Only returns images and Video & reels can't be fetched.
There are some website that are able to get all the Reels/Videos/Images together

Check Link :

hosseinmobarakian profile image
h_mobarakian Author

Do this way for each , don't copy and paist

hosseinmobarakian profile image
h_mobarakian Author

Thank you.

merth_dev profile image
Mert Haddad

Thanks a lot 👏, any idea how to get the IG live stream url in the same way?

youtubewala profile image
youtubewala • Edited on

hello thank you , you made my work very easy. create one simple coading for nstagram reels video download, its woks great. what type of coading it is

melikashojaee profile image

thanks for this code
but this code just return the link of first page for album for get all of them what shoud we do?

masudcl profile image
Masud Rana

You didn't do it the way you did
Theirs is

Need a better mental model for async/await?

Check out this classic DEV post on the subject.

⭐️🎀 JavaScript Visualized: Promises & Async/Await

async await