Etsy Integration

I am getting same problem. Would you check the oAuth 2 implemetation especially for etsy
@RicardoE105

Has anyone successfully integrated Etsy personal access with n8n? I’m struggling with the authentication part.

Agreed about getting away from reliance on external services like Make (although it was a good first step for me).

I actually got it working in n8n but I don’t use the credentials. Instead, I get the auth headers to set using a sub-workflow that executes some code to do the Oauth part and also stores the refresh token in a mysql database. Perhaps it’s overkill but I was determined to get complex. Here it is, it might inspire someone:

I also started knocking together an Etsy MCP Server (well, some LLMs are - I got no idea what I’m doing) in case anyone wants to try it out or help build it: GitHub - profplum700/etsy-mcp-server

1 Like

I wonder if my usage of a separate MySQL container to store credentials is overkill and I could have achieved the same thing with Workflow Static Data… Demo Workflow - How to use workflowStaticData() | n8n workflow template

Hi. I have been using make for a while and migrating to n8n but not having Etsy integration in n8n is challenging. I think I will use the workaround you do.

Hi I“m also highly interested in intergrating Etsy to N8n. Would love to get orders out and write them in my order Database. Tryed python but didn“t get the auth right. If someone is working on it i would love to hear about the projects.

1 Like

Hi, I’m trying to learn how to bring together orders from Etsy, eBay, and Amazon, but so far I’ve only managed to do it with eBay. Could I ask you to kindly explain to a beginner how you were able to set up order collection from Etsy? I requested API credentials from them, but they refused, saying that they don’t officially work with n8n…

I’m now getting this error:

{"error":"Invalid API key: should be in the format 'keystring:shared_secret'."}

I am able to do it with insomnia, and I believe it is getting tripped up on access token step.

Note the secure values have been removed / changed

For the Failing access token step by n8n oauth2 flow

  • Grant Type: PKCE
  • Authentication: Body

Headers:

Accept: application/json, application/x-www-form-urlencoded
Accept-Encoding: gzip, br
Authorization: Basic bXljbGllbnRpZDpzdXBlcnNlY3JldHBhc3M=
Content-Type: application/x-www-form-urlencoded

Body (application/x-www-form-urlencoded):

code=Jg2TyywseQbwhuPZjrcf-geb4Wya7p8YboHuUrDpb-ZBXs7jajuxLiObeec6SF-57z2PPtLJA4ICQezpHvF
grant_type=authorization_code
redirect_uri=https://n8n.domain.tld/rest/oauth2-credential/callback
code_verifier=generatedCodeVerification

Successful Insomnia Access Token step

  • Grant Type: Authorization Code
  • Use PKCE
  • Code Challenge SHA-256
  • state set to random value
  • credentials sent in request body

Headers:

Accept: application/x-www-form-urlencoded, application/json
Accept-Encoding: gzip, br
Content-Type: application/x-www-form-urlencoded
X-Forwarded-Proto: https

Body (application/x-www-form-urlencoded):

grant_type=authorization_code
code=Jg2TyywseQbwhuPZjrcf-geb4Wya7p8YboHuUrDpb-ZBXs7jajuxLiObeec6SF-57z2PPtLJA4ICQezpHvF
redirect_uri=https://localhost:8000
state=random-state-value
code_verifier=generatedCodeVerification
client_id=myclientid
client_secret=supersecretpass

Hope this helps! Currently using make just for their functioning etsy integration, which I then POST right into an existing flow here.

I use this library for google script to etsy. Can this be used in n8n?

Hi there! I’m also trying to automate order information from Etsy. Did I understand correctly that there’s currently no simple way to do this using n8n alone? I’m still a beginner, so I’d rather not struggle too much with it. :slight_smile:

Hi Chewme,
Thanks for your advice. I tried it that way, but I ran into the same issue as in n8n. When logging in, I get the message: ā€œAn error occurred. The application that is requesting authorization to use your Etsy account is not recognized.ā€
Could you help me with this?

Hi there again,

I wasn’t able to connect to Etsy using either n8n or Make.
The support team replied to my question and explained the situation — here’s what they said:

summerized:

It’s against Etsy’s API policy to register an API key on behalf of third-party apps like n8n. Only officially approved apps can do that.

On the Apps page, I only see a small number of available apps — such as Billbee and CedCommerce — but not n8n or Make. It seems that Etsy only allows their own registered apps to connect through the API.

Am I understanding this correctly — that I simply have to wait until third-party platforms like n8n or Make implement official Etsy integration before I can connect my shop for automation?

Best regards,
Marius

Curious what the specific part of the policy prohibits this. An API is almost by definition sending data out to third parties.

In my case, I registered as an internal app, since it is less restricted.

You’ll need a website to register (your shop url counts) and it can take a few weeks for it to go through. I posted a screenshot for managing your apps below for reference.

Some resources: Developer Portal home

Currently I’m using make.com to watch for receipt updates, parse for json, and post to my webhook (which could be n8n). I’d really like to move away from make.com since it’s really easy to go through 1k tokens when you have to poll for updates..

Here’s my Manage your apps page:

Finally got Etsy API working! (Manual OAuth2 Flow workaround)

Hi everyone,

I read through this thread and saw many people struggling with the native Etsy integration and the PKCE errors. I finally managed to build a stable workflow that connects to Etsy API successfully.

Since the built-in credentials/node can be tricky, I implemented a ā€œmanualā€ OAuth2 flow. Here is the logic that works for me:

The Concept: Instead of relying on n8n to manage the tokens, I store them in a database (like Google Sheets, Baserow, or Postgres) and handle the refresh logic explicitly within the workflow.

The Steps:

  1. Initial Setup (External): First, I had to generate the initial refresh_token and access_token manually outside of n8n (I used a PowerShell script to handle the PKCE handshake and get the first tokens). I then manually saved these tokens and the expiration time into my database.

  2. The Workflow Logic (see screenshot):

    • Get row(s): Fetch the current tokens and expiration time from the database.

    • ComputeNeed (Code): Check if the access_token is expired or about to expire.

    • If Node:

      • True (Expired): Send a POST request to Etsy’s token endpoint (/v3/public/oauth/token) using the saved refresh_token.

        • Crucial Step: Etsy rotates refresh tokens! So, immediately update the database with the new refresh_token and access_token using the Update row node.
      • False (Valid): Just pass the existing token through.

    • Merge: Combine the paths so that the final node always receives a valid token.

    • Etsy API Request: Perform the actual API call (e.g., getting orders) using the valid access_token in the header.

This ensures the connection stays alive indefinitely without manual intervention after the first setup. Hope this helps anyone stuck on this!

2 Likes

Note, this was sent today:

I updated my implementation and this is working :grinning_face:

As part of our ongoing efforts to better protect your Etsy OpenAPI application, we will require all API requests to include a shared secret starting on January 18, 2026.

To ensure uninterrupted access to the OpenAPI after this date, please update your x-api-key header to include your shared secret.

The new header format is x-api-key: keystring:secret, instead of the previous x-api-key: keystring.

You can find your shared secret on the Your Apps page: Your Apps

Do you mind sharing your workflow?

@tyler71 and @Andrii_Shkrebko

Thanks! I did the same , and it works.

1 Like

For anyone who is still looking for an answer, here is my solution.

I ended up writing a small Python server. It works great:

Run this server and use it via these workflows.

Keep the webhook workflow activated (enable the toggle on top) so that it can listen to webhook calls from python server.

IMPORTANT: Use the ā€œProduction URLā€ from webhook when pasting it inside the python server. This is the URL that gets used when a workflow is ā€œactivatedā€.

Why delete row and insert row?

Because I always want to keep only one row in the table. :smiley:

2 Likes

Thanks @hemendra , this is very similar to an approach I made last year before this post blew up. What I never got then and is holding me up now though is the callback. n8n keeps saying that the state is invalid: ā€œError: Invalid state formatā€.

What I’m wondering is, am I missing something about the callback? Before I got an error (can’t recall what specifically), but I just took the token out the URL. Now I want to verify the auth scopes are updated, but this seems to be blocking me. Any advice welcome!

Got it on my end, forgot I had a secondary callback function in my code and just needed to manually pass that it to get things ā€œconfirmedā€. Seems Etsy is not allowing use of transactions_r scope? Or my implementation is just bad?