Copying photos to from Instagram


looks like a promising one-off transfer solution on the way though.

Might do yearly archiving of mine, as I usually delete IG posts after 2 years up there.

Understand about IG. The technique still works and I adapted it for Untappd. I use IG regularly. The local nano craft brewery uses IG to announce their new releases. If I’m not on IG, I’ll miss the release announcement and the beer.

do you have examples of it working to
I’ve reached my 5 zap free limit and only wanna shove out another if it’s proper good & reliable.

Sure: Khürt Williams - Beer

I see. But these are drawn from Untappd as source right?
Any evidence that IG source functions properly?
I was blocked on IG briefly for using a PhantomBuster follower that did anything more than 1 every 4 hours.

Sorry. I misunderstood that ask. IG example is here: Khürt Williams -

Works on Brave, but is blocked on my Facebook-blocking Firefox, implying there is some sense in which its retained Facebook’s touch, rather than indepedently owned image data:

Interesting. It’s not your browser. Instagram (aka Facebook) is blocking the image from loading on :man_shrugging:t4:

I’ll have to find a way to upload the image instead of linking.

Would be a better more sustainable solution anway. Could you automate uploading it to M.b?

I’m still looking into this.

Amazing dude: lmk!

Their new html exports are actually surprisingly decent, and certainly heaps better than TikTok’s JSON ones. I’m experimenting next week with publishing non-private parts using GitHub Pages as an alternative approach.

1 Like


I’m sure I don’t understand what this means below.

I need some help with the media upload part. I’m not sure I understand the parameters that get sent to the media upload endpoint.

In Zapier I sent a GET request and received a response with a number of parameters.

The question is what should be in the POST request to upload a file.

I have a Zapier account, but unfortunately don’t have access to the premium features, like Webhooks. So I can’t verify this myself, but I think you should do the following:

  1. Remove access_token from the Data.
  2. Below Headers, add Authorization with the value Bearer 1234...].

Replace 123... above with your unique access token. That should do it, at least for authorization.

I’m unsure about the file part below Data. That part belongs there, but its value should be an actual image (image data). From your screenshot, it looks like it’s just an URL to an image (not the image itself).

Maybe Zapier is smart enough to handle that for you. You’ll have to test the zap and see what happens.

Thank you. I don’t think authorisation is an issue. It’s something else’s. I can query the endpoint. I just don’t know what to send to upload a photo

There are two issues with the current zap: the authorization token is sent as multipart form data, and no image is provided (just an URL to an image). I’ve confirmed this with my Zapier account just now.

You have to follow my instructions above and add an additional action (Webhook GET request) to download the image before posting it to Following below is a screenshot of a working zap.

Three things to take note of:

  1. The second action in the zap downloads the actual photo from Instagram.
  2. The downloaded file is then used in the third action (below the heading File).
  3. Authorization is done below the heading Headers.

Alread had that. Here is my existing Zap. It works perfectly to create a post on with inline links to the Instagram image.

What I want to do instead, is

  1. upload the Instagram image to
  2. then create a post that includes the version of the image.

So per @manton 's procedures I added at GET request to first query’s micropub to get the media endpoint.

Now this is the part that I didn’t qutie understand.

The media endpoint accepts a multipart/form-data upload with a file part containing the JPEG image data.

I created a new Webhook POST to the media end point.

The last part was modifying my original POST webhook to insert the HTML for IMG tag.

It works.

See final result here:

1 Like

Nicely done! :tada:

I figured out how to recreate this flow on (formerly Integromat), which has a more generous free tier than Zapier. I’ve tested it with this post (Instagram original) and it appears to all be hooked up right! With seemingly out of the picture, this is a (relatively) simple and free way to cross-post from Instagram to and retain control over that aspect of your social posting.

Note that you may need to run each step individually as you build it in order for the necessary fields to become available to map in later steps. This was the trickiest part for me, since it didn’t want to pass the latest Instagram post along more than once.

(Step 1) Watch Media from Instagram

Connects to your Instagram account and collects the new post when run.

(Step 2) Download Media from Instagram

Map the Media ID from Step 1 so it can hold onto the image for later steps.

(Step 3) Make an HTTP GET request

Use the URL, GET Method, and for Headers make sure you leave just one space between “Bearer” and your Access Token generated from your account settings. The Query String name and value are q and config And don’t forget to switch ‘Parse response’ to Yes so that you can get the granular bit you need for the next step.

(Step 4) Make an HTTP POST request

Here’s where it’s a little complicated. You don’t need to map any data from the previous step to the top URL field. will do. Use the POST method. Headers are the same as Step 4. For the body type, you’ll select 'Multipart/form-data, and add three fields. The first two are Text fields, with keys / values of h / entry and type / image/jpeg. The third field item is ‘File’ with key of file and the value, you’ll select the Download Media that we got in Step 2. Again, select Yes for ‘Parse Response’.

(Step 5) Make an HTTP POST request

We make another POST request, and go back to the URL. No Headers or Query Strings necessary this time. Body type is ‘Multipart/form-data’ and we’ll make three field items again. They’re all ‘Text’ fields this time, with keys / values of h / entry and access_token / just the access token from Steps 3 & 4. The third ‘Text’ item is what we’ve been aiming toward: the post. The key is content and for the value, you’ll type out what you want the post to look like, and you’ll include the image’s new URL on as mapped from the result of Step 4. That’s the 5. data: url bit you see in the screenshot. You can customize this value to your heart’s delight, but I styled it with the Caption item mapped from Step 1 first, followed by the :camera: emoji, so it gets grouped by’s emoji tags. I left a blank line and then an <img src="UPLOADED-IMAGE'S-NEW-MICRO.BLOG-URL.jpg"/>. This style puts it in line with the default formatting of image posts when uploaded directly to

And that’s it! Post something new to Instagram, and then run the whole scenario as a test before turning on the scheduling feature. After scheduling is turned on, it’ll take care of posting any photos to your automatically. You could then use cross-posting in your settings to get that photo elsewhere, too.

Limitation: The method as described above is limited to single photo posts, or just the first photo from multi-photo posts. If you want to exclude multi-photo posts and videos, add a filter after Step 1 that matches the ‘Media Type’ to ‘IMAGE’. Multi-photo posts (CAROUSEL_ALBUM) and videos (VIDEO) will get stopped from moving onto the next steps.

A big thanks to @gr361 for creating this shortcut, which I used to debug my GET/POST requests.

1 Like

Turns out adapting this to work with videos was pretty easy. You can a Router step and then branch off to different outcomes using filters.

For the top route for images, I used a Filter that checks for the ‘Media type’ of either IMAGE or CAROUSEL_ALBUM and designated it as the fallback route. This makes sure that at least an image will get uploaded from whatever gets posted to Instagram.

For the bottom route for videos, I added a separate filter looking for the VIDEO media type. Then I copied and pasted the HTTP requests to hook them up.

Finally, I just had to edit two of the fields to work with videos rather than images.

video/mp4 is the new value for the type key.

and <video><source src="MICRO.BLOG_VIDEO_URL_FROM_LAST_STEP.mp4" type="video/mp4"></video> is all you need for the content value!

Here’s my example post and the Instagram original. has some powerful actions. Perhaps grabbing multiple photos from a CAROUSEL_ALBUM will also be possible, but that’s an endeavor for another night.

I also documented this on my blog, for posterity.

Ooh. Thank you. I’m off to create a account.