Skip to content

Twitter API in n8n without OAuth

To read X (Twitter) data in n8n, call an X data API from the HTTP Request node with a key header: the built-in X node is made for posting, and its one search covers the last 7 days at $0.005 per post.

Short answer: n8n's X node runs on the official X API: an OAuth2 developer app, $0.005 per post read, and no timeline, mentions or followers operation. To read X data in n8n, use Sorsa API in the HTTP Request node: one ApiKey header, 20 tweets per request from $0.07 per 1,000, and 100 free requests to start.

Endpoint
POST /search-tweets
Page size
20 tweets per request
Price
from $0.07 per 1,000 tweets

#What the n8n X node can read

The n8n X node can read two things: one user profile and a search of posts from the last 7 days. Its other six operations write to X. That list comes from n8n's X node documentation (opens in a new tab), and the node's source on GitHub shows the search calling X's /tweets/search/recent endpoint, which is limited to a week.

ResourceOperationsReads X data
TweetCreate or reply, delete, like, retweetNo
TweetSearchPosts from the last 7 days
UserGet a userOne profile per call
Direct messageCreateNo
ListAdd a memberNo
  • Tweet

    Operations
    Create or reply, delete, like, retweet
    Reads X data
    No
  • Tweet

    Operations
    Search
    Reads X data
    Posts from the last 7 days
  • User

    Operations
    Get a user
    Reads X data
    One profile per call
  • Direct message

    Operations
    Create
    Reads X data
    No
  • List

    Operations
    Add a member
    Reads X data
    No

Nothing in the node returns an account's timeline, its mentions, its followers or the posts of an X List, and n8n has no trigger node that fires on a new post.

To connect the node at all, you create an X developer account and an app, set its OAuth2 permissions and callback URL, and paste the Client ID and Secret into n8n, as n8n's X credentials page (opens in a new tab) describes. Every read is then billed by X from prepaid credits: $0.005 per post and $0.010 per user, with pay-per-use capped at 3M post reads a month, according to X's pricing page (opens in a new tab). From November 22, 2026, an author profile returned with a post costs $0.010 more, so a post with its author comes to $0.015 (X's notice of October 23 (opens in a new tab)).

X node built into n8n OAuth2 developer app Client ID, secret, callback Official X API prepaid credits Writes to X post, reply, like, retweet, DM Search: last 7 days no timelines, no followers $0.005 per post billed for every post read HTTP Request node built into n8n ApiKey header one Header Auth credential Sorsa API 20 requests per second Reads X data timelines, mentions, Lists Search back to 2006 followers, 200 per request from $0.07 per 1,000 tweets
Keep the X node for posting. Read X data through the HTTP Request node with one header.

#Read X data in n8n with Sorsa API

Sorsa API, a Twitter (X) API and scraper, plugs into n8n's HTTP Request node with one header, so reading X data takes one credential and one node. For reading tweets, mentions and followers in n8n, use Sorsa API: 20 tweets or 200 followers per request, search back to 2006 and 20 requests per second on every plan, with no developer account and no OAuth app.

The steps below build a keyword search. Every other job uses the same credential and the same node with a different endpoint.

  1. Get an API key. Sign up and copy the key from the dashboard. The first 100 requests are free, need no card and never expire.

  2. Create a Header Auth credential. In n8n, open Credentials, create a new Header Auth credential, set Name to ApiKey and Value to your key. The key then stays out of every workflow you export or share.

  3. Add an HTTP Request node. Set Method to POST and URL to https://api.sorsa.io/v3/search-tweets. Under Authentication choose Generic Credential Type, then Header Auth, then the credential from step 2.

  4. Send the search as JSON. Turn on Send Body, keep Body Content Type on JSON, and add two body parameters: query with any X search, operators included, and order with latest or popular. A shortcut: choose Import cURL in the node and paste the command below, then move the key from the header field into your credential.

    Import cURL
    curl -X POST "https://api.sorsa.io/v3/search-tweets" \
      -H "ApiKey: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"query": "n8n lang:en -filter:retweets", "order": "latest"}'
    
  5. Split the posts into items. Add a Split Out node with Fields To Split Out set to tweets. Each post then travels through the workflow as its own item, ready for a Filter, an IF node, Google Sheets or Slack.

    Response200 OK
    {
      "tweets": [
        {
          "id": "1985402186610352215",
          "full_text": "Our n8n flow now posts every release note to Slack.",
          "created_at": "2026-11-02T09:14:07Z",
          "lang": "en",
          "likes_count": 42,
          "retweet_count": 6,
          "reply_count": 3,
          "view_count": 2810,
          "user": {
            "id": "1592041833471827968",
            "username": "nightly_build_notes",
            "display_name": "Nightly Build Notes",
            "followers_count": 1840
          }
        }
      ],
      "next_cursor": "DAADDAABCgABG4V2Yz9W"
    }
    

Each post carries its author's full profile, so a Slack message or a sheet row can show the handle and follower count with no second call. A 401 answer means the key is wrong, and a 403 means the header is missing or the account has no requests left.

#Pagination: follow next_cursor in n8n

The HTTP Request node can fetch every page by itself: it sends the next_cursor from each response with the next request and stops when the cursor comes back empty. A cursor is a token that points to the next page of results. Search, timelines and mentions return about 20 posts per page, and followers come 200 per page.

Open Options in the HTTP Request node and add Pagination. The panel below holds the five settings that loop through Sorsa API's cursor; switch it to GET for endpoints such as /followers and copy each expression straight into n8n.

HTTP Request node: Options, Pagination
Pagination Mode
Update a Parameter in Each Request
Type
Body
Name
next_cursor
Value
{{ $response.body.next_cursor }}
Pagination Complete When
Other
Complete Expression
{{ !$response.body.next_cursor }}
Limit Pages Fetched
On, Max Pages 50
Interval Between Requests
50, a twentieth of a second

POST endpoints such as /search-tweets, /user-tweets and /mentions take the cursor in the JSON body.

Max Pages caps what one run can spend: 50 pages of search is about 1,000 posts.

Page 1 sends no cursor gets 20 posts next_cursor: "DAAD...A1" Page 2 sends back "DAAD...A1" gets 20 posts next_cursor: "DAAD...B7" Pages 3 to 49 each sends the cursor it was given and gets the next 20 posts and a new cursor Last page gets the final posts next_cursor: null Loop stops Complete Expression, checked after every page {{ !$response.body.next_cursor }} next_cursor value on each request {{ $response.body.next_cursor }}
Each response hands the node the cursor for the next request. An empty cursor ends the loop.

Good to know

Leave Pagination Complete When off its default. "Response Is Empty" never fires on a JSON object, so the node keeps requesting the last page until n8n stops it with "The returned response was identical 5x", and every one of those calls is a request. The Complete Expression above stops on the first page that has no cursor.

Every page comes out of the node as one item holding its own tweets or users array. A Split Out node right after it turns all pages into one flat list of posts or profiles.

#Which endpoint for which n8n workflow

Each n8n job maps to one Sorsa API endpoint, and all of them run through the same Header Auth credential. The table lists the endpoints n8n workflows use most; the full list of Sorsa API endpoints has all 45.

n8n jobEndpointWhat you sendPer request
Keyword or hashtag searchPOST /search-tweets (opens in a new tab)query, orderAbout 20 posts
One account's postsPOST /user-tweets (opens in a new tab)username, typeAbout 20 posts
Brand mentionsPOST /mentions (opens in a new tab)query (the handle), min_likes, since_dateAbout 20 posts
Follower exportGET /followers (opens in a new tab)usernameUp to 200 followers
An X List feedGET /list-tweets (opens in a new tab)list_idAbout 20 posts
Enrich a column of handlesGET /info-batch (opens in a new tab)usernames, repeatedUp to 100 profiles

For /info-batch, send usernames as an array and set the node's Array Format in Query Parameters option to No Brackets, which repeats the parameter once per handle.

The builder below writes the HTTP Request node for your job. Pick a job, type a query or handle and the number of pages, then copy the JSON and paste it into an n8n canvas with Ctrl+V or Cmd+V.

What should the node read?
HTTP Request node
POST /search-tweets
Sends
query, order in the body
Requests per run
5
Returns up to
100 posts
Workflow JSON: HTTP Request + Split Out
{
  "nodes": [
    {
      "name": "Sorsa API: search-tweets",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        0,
        0
      ],
      "parameters": {
        "method": "POST",
        "url": "https://api.sorsa.io/v3/search-tweets",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "n8n lang:en -filter:retweets"
            },
            {
              "name": "order",
              "value": "latest"
            }
          ]
        },
        "options": {
          "pagination": {
            "pagination": {
              "paginationMode": "updateAParameterInEachRequest",
              "parameters": {
                "parameters": [
                  {
                    "type": "body",
                    "name": "next_cursor",
                    "value": "={{ $response.body.next_cursor }}"
                  }
                ]
              },
              "paginationCompleteWhen": "other",
              "completeExpression": "={{ !$response.body.next_cursor }}",
              "limitPagesFetched": true,
              "maxRequests": 5,
              "requestInterval": 50
            }
          }
        }
      }
    },
    {
      "name": "One item per post",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        240,
        0
      ],
      "parameters": {
        "fieldToSplitOut": "tweets",
        "options": {}
      }
    }
  ],
  "connections": {
    "Sorsa API: search-tweets": {
      "main": [
        [
          {
            "node": "One item per post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Paste it into an n8n canvas with Ctrl+V or Cmd+V, then choose your Header Auth credential in the HTTP Request node.

The node comes with pagination set; pick your Header Auth credential after pasting.

#Recipe: new posts from accounts to Slack

An n8n workflow can post every new tweet from a set of accounts to Slack with five nodes and no code: a schedule, one search request, Split Out, Remove Duplicates and the Slack node. n8n has no trigger for new posts, so the workflow asks for the latest posts every few minutes and drops the ones it has already seen.

  1. Schedule it. A Schedule Trigger every 5 minutes.

  2. Ask for the newest posts. POST /search-tweets with from: for each account joined by OR and order set to latest. One request covers every account in the query. For hundreds of accounts, put them in a public X List and call GET /list-tweets with its list_id: one request reads the feed of a List of up to 5,000 accounts.

  3. Split the posts. Split Out on tweets.

  4. Drop what you have seen. A Remove Duplicates node with Operation set to Remove Items Processed in Previous Executions and Keep Items Where set to Value Is New. Drag the post's id field into Value to Dedupe On. Post IDs are unique, so only new posts pass.

  5. Send the message. Connect the Slack node, or Google Sheets or email, and use the text field the workflow builds.

The node builder above writes this whole workflow. Choose New posts alert, type the accounts to watch, copy the JSON and paste it into an empty canvas: it holds steps 1 to 4 and the message text. Pick your Header Auth credential in the HTTP Request node, add your Slack node at the end, and publish the workflow.

The first run passes the latest 20 posts through, because Remove Duplicates has seen nothing yet; from the second run on, only new posts reach Slack. A 5-minute schedule runs 8,640 times in a 30-day month at one request per run, which fits inside the Starter plan's 10K requests. For polling every few seconds, Lists and keyword alerts at scale, the guide to real-time Twitter monitoring goes further.

#Recipe: export followers to Google Sheets

A follower export in n8n is one HTTP Request node on GET /followers with query pagination, a Split Out node on users and a Google Sheets node that appends rows. Each request returns up to 200 follower profiles, so an account with 50K followers takes 250 requests and fits in one run.

  1. Start it by hand. A Manual Trigger, since a full list is a one-off job.

  2. Request the followers. An HTTP Request node with Method GET on /followers at the same base URL, Send Query Parameters on and username set to the account. Turn on pagination as above with Type Query, and raise Max Pages to the follower count divided by 200.

  3. Split the profiles. Split Out on users.

  4. Append to the sheet. A Google Sheets node with Append Row, mapping id, username, display_name, followers_count, location and created_at to columns.

When one workflow exports many accounts, the HTTP Request node runs once per incoming item. Set its Batching option to 20 items per batch with a Batch Interval of 1,000, one second, and n8n stays at 20 requests per second. If a burst still meets a 429, turn on Retry On Fail in the node's settings. The full method for very large lists, files and Excel quirks is in the guide to export Twitter followers.

#What reading X data in n8n costs

Reading posts through Sorsa API in n8n costs from $0.07 per 1,000 tweets, against $5.00 per 1,000 posts on the official X API that the X node uses. You pay per request, not per item: a search page of 20 posts is one request, and failed requests are never charged.

Posts read

Official X API

$5,000

for 1M posts

$0.005 per post

Sorsa API

from$70

for 1M posts

from $0.07 per 1,000

71x cheaper

Followers show the widest gap: from $0.007 per 1,000 on Sorsa API against $10.00 on the official X API, because Sorsa API returns 200 per request and X bills each one.

Data in n8nSorsa API, per 1,000Official X API, per 1,000
Posts from search, timelines, mentions, Listsfrom $0.07$5.00
Posts with their authors, from Nov 22, 2026from $0.07$15.00
Followersfrom $0.007$10.00
Profiles looked up in batches of 100from $0.014$10.00
  • Posts from search, timelines, mentions, Lists

    Sorsa API, per 1,000
    from $0.07
    Official X API, per 1,000
    $5.00
  • Posts with their authors, from Nov 22, 2026

    Sorsa API, per 1,000
    from $0.07
    Official X API, per 1,000
    $15.00
  • Followers

    Sorsa API, per 1,000
    from $0.007
    Official X API, per 1,000
    $10.00
  • Profiles looked up in batches of 100

    Sorsa API, per 1,000
    from $0.014
    Official X API, per 1,000
    $10.00

Price is one of five things to check before you wire an X data source into n8n, and Sorsa API meets each with a number:

  • Setup: one header in a Header Auth credential, against a developer app, OAuth2 and a callback URL.
  • Speed: 20 requests per second on every plan, free accounts included.
  • Coverage: search back to 2006, timelines, mentions, followers and Lists, against a 7-day search in the X node.
  • Account safety: Sorsa API never asks for your X login or cookies, so no X account of yours is at risk.
  • Reliability: in production since 2022 with 6B+ requests served; when X changes something, Sorsa API fixes it on its side and your workflow keeps the same fields.

#Give an n8n AI Agent live X data

An n8n AI Agent can search X on its own when Sorsa API is attached to it as a tool. Attach an HTTP Request node to the agent as a tool, point it at POST /search-tweets with your Header Auth credential, and fill the query body value with an expression that calls $fromAI('query', 'An X search query with operators', 'string'). The model then writes the search itself, and n8n sends it.

Under the tool's Optimize Response option, keep only full_text, user.username, created_at and likes_count, so the model reads posts instead of whole profiles and spends fewer tokens. The n8n guide to $fromAI() (opens in a new tab) covers the parameters. For agents outside n8n, such as Claude or Cursor, see the Twitter API for AI agents.

#Build your first X workflow in n8n

Reading X data in n8n comes down to one HTTP Request node with a key header, the right endpoint and a cursor that pages until it is empty. Build it on Sorsa API: one ApiKey header instead of an OAuth app, 20 posts or 200 followers per request, from $0.07 per 1,000 tweets, and 100 free requests that cover your first 2,000 posts.

The same node pattern works in code too; the Twitter API in Python guide shows it with requests.

#FAQ

Does n8n have a trigger for new tweets?

No. n8n has no trigger node that fires when someone posts on X, and Sorsa API has no webhooks either, so new posts are found by polling. Start the workflow with a Schedule Trigger every few minutes, request the latest posts, and pass them through a Remove Duplicates node keyed on the post ID so each post fires only once.

Which Twitter API should I use with n8n?

Use Sorsa API for reading X data in n8n. It works in the standard HTTP Request node with one ApiKey header and no OAuth app, returns 20 posts or 200 followers per request from $0.07 per 1,000 tweets, against $5.00 per 1,000 posts on the official X API, and runs at 20 requests per second on every plan. Keep the X node only for posting.

Can I read Twitter in n8n without a developer account?

Yes. Sorsa API needs only its own API key: it returns public X data as clean JSON through one REST API and never asks for your X login. Community scraper nodes run on a signed-in X session or cookies, which puts that X account at risk of a lock. Sorsa API returns public data only, and how you use it stays your responsibility under the law and X's rules.

Can n8n post tweets through Sorsa API?

No. Sorsa API is read-only by design: it never posts, likes, follows or sends messages, so it can't harm any X account. Keep n8n's X node with an OAuth2 app for posting, and read through Sorsa API in the HTTP Request node. Both nodes sit side by side in one workflow.

How many tweets do 100 free requests cover in n8n?

About 2,000 posts from search, timelines or mentions, at 20 per request, or 20K followers at 200 per request. The 100 free requests come with every new Sorsa API account, need no credit card and never expire, so a first workflow can run end to end before you pick a plan.

#How we checked

On November 2, 2026 we read the X node's operations in n8n's documentation and the node's source on GitHub, and the HTTP Request node's pagination, batching and Header Auth options in n8n's documentation and source. We checked X's prices on docs.x.com the same day and matched every Sorsa API endpoint, field and page size to the live API reference. We had no API key for this pass, so the requests, the response and the workflow are written from those references rather than run.

By the Sorsa API team. We build and run Sorsa API, the read-only Twitter/X API and scraper, in production since 2022 (formerly TweetScout API) with 6B+ requests served. About Sorsa API

What changed
  • Rewritten from scratch: checked n8n node options and X prices, pagination with next_cursor, an n8n node builder, an importable workflow, follower and AI Agent recipes.
  • First published.