{"id":16694,"date":"2025-12-19T10:39:17","date_gmt":"2025-12-19T10:39:17","guid":{"rendered":"https:\/\/thinkpeak.ai\/handling-pagination-make-com-apis\/"},"modified":"2026-02-04T23:39:04","modified_gmt":"2026-02-04T23:39:04","slug":"handling-pagination-make-com-apis","status":"publish","type":"post","link":"https:\/\/thinkpeak.ai\/tr\/handling-pagination-make-com-apis\/","title":{"rendered":"Make.com API'lerinde Sayfaland\u0131rmay\u0131 \u0130\u015fleme"},"content":{"rendered":"<p>You built the perfect automation. The logic is sound, the mappings are clean, and the test run returned a beautiful JSON payload. But a week later, you notice a discrepancy. Your CRM has 5,000 new leads, but your automation only processed 50.<\/p>\n\n\n\n<p>You just hit the <b id=\"pagination-wall\">Pagination Wall<\/b>.<\/p>\n\n\n\n<p>Pagination is the method APIs use to break large datasets into manageable chunks, or &#8220;pages.&#8221; This preserves server performance. For a human browsing a website, clicking &#8220;Next Page&#8221; is easy. For an automated workflow in <b id=\"make-com-automation\"><a href=\"https:\/\/thinkpeak.ai\/tr\/make-com-senaryolari-aciklandi\/\">Make.com automation<\/a><\/b>, it determines if your system works or fails.<\/p>\n\n\n\n<p>If you are building self-driving ecosystems rather than simple tasks\u2014the core mission of <a href=\"https:\/\/thinkpeak.ai\/tr\/\">Thinkpeak.ai<\/a>\u2014incomplete data is unacceptable. An AI agent that only sees the first 50 rows of your sales data isn&#8217;t intelligent. It is hallucinating based on a partial reality.<\/p>\n\n\n\n<p>In this guide, we move beyond basic documentation. We will explore how to architect robust <b id=\"pagination-workflows\">pagination workflows<\/b> in Make.com. We cover everything from simple logic to complex cursor-based navigation used by tools like Shopify and Slack.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Three Types of API Pagination<\/h2>\n\n\n\n<p>Before dragging modules onto your canvas, you must identify how your specific API handles data. Open your <a href=\"https:\/\/developers.make.com\/api-documentation\/pagination-sorting-filtering\" rel=\"nofollow noopener\" target=\"_blank\">API documentation<\/a> and look for &#8220;Pagination.&#8221; You will typically find one of three models.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Offset or Page-Based (The Classical Model)<\/h3>\n\n\n\n<p>This is the most intuitive method. You tell the API to give you &#8220;page 3&#8221; or to skip the first 200 records and give the next 100.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parametreler:<\/strong> <code>page=1<\/code>, <code>limit=100<\/code> OR <code>offset=200<\/code>, <code>limit=100<\/code>.<\/li>\n\n\n\n<li><strong>Make.com Difficulty:<\/strong> D\u00fc\u015f\u00fck.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Cursor-Based (The Modern Standard)<\/h3>\n\n\n\n<p>High-volume platforms like Meta, Stripe, and Slack use <b id=\"cursor-based-pagination\">cursor-based pagination<\/b> to prevent data drift. The API provides a unique &#8220;token&#8221; pointing to the last item you received. You must pass this token back to get the next batch.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parametreler:<\/strong> <code>starting_after=xh52...<\/code>, <code>next_page_token=abc...<\/code>.<\/li>\n\n\n\n<li><strong>Make.com Difficulty:<\/strong> High (requires dynamic looping).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Link Header (The &#8220;Hidden&#8221; Model)<\/h3>\n\n\n\n<p>The API doesn&#8217;t put pagination details in the JSON body. Instead, it hides the &#8220;Next Page URL&#8221; inside the <b id=\"http-response-headers\">HTTP Response Headers<\/b>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Make.com Difficulty:<\/strong> Medium (requires header parsing).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Method 1: The Native HTTP Module Solution<\/h2>\n\n\n\n<p>Many users ignore the advanced settings in Make\u2019s standard <strong>HTTP &gt; Make a request<\/strong> module. They are unaware that native pagination support exists.<\/p>\n\n\n\n<p><strong>When to use it:<\/strong> Use this for simple, standard APIs. This works best when you just need to increment a query parameter until the data stops.<\/p>\n\n\n\n<p><strong>How to configure:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open your <b id=\"http-module\">HTTP mod\u00fcl\u00fc<\/b>.<\/li>\n\n\n\n<li>Scroll to the bottom and check <strong>&#8220;Show advanced settings&#8221;<\/strong>.<\/li>\n\n\n\n<li>Check the <strong>&#8220;Pagination&#8221;<\/strong> option.<\/li>\n<\/ol>\n\n\n\n<p>This reveals three new fields:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>URL\/Query String:<\/strong> Define the parameter to increment (e.g., <code>Sayfa<\/code>).<\/li>\n\n\n\n<li><strong>Merge with parent:<\/strong> Keep this <code>Evet<\/code>. It merges your pagination params with your original request.<\/li>\n\n\n\n<li><strong>Condition:<\/strong> This is the &#8220;Stop&#8221; button. You must write a formula that tells Make when to quit.<\/li>\n<\/ul>\n\n\n\n<p><strong>The &#8220;Condition&#8221; Formula:<\/strong><\/p>\n\n\n\n<p>You usually check if the response body is empty.<\/p>\n\n\n\n<p><code>{{length(body.data) &gt; 0}}<\/code><\/p>\n\n\n\n<p>As long as this formula is TRUE, Make will keep requesting the next page.<\/p>\n\n\n\n<p><strong>Why this often fails:<\/strong> The native feature is opaque. It is hard to debug why a loop stopped. For enterprise-grade reliability, we recommend building the logic explicitly using the methods below.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Method 2: The Repeater Loop<\/h2>\n\n\n\n<p>This is the gold standard for controlling your data flow. It separates the counting logic from the fetching logic. This works best for <b id=\"offset-pagination\">offset pagination<\/b>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scenario: Fetching 5,000 leads, 100 at a time.<\/h3>\n\n\n\n<p><strong>Step 1: The &#8220;Scout&#8221; Request<\/strong><\/p>\n\n\n\n<p>First, make a single call to the API to get the total count of records.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> HTTP (Make a request)<\/li>\n\n\n\n<li><strong>URL:<\/strong> <code>...\/leads?limit=1<\/code><\/li>\n\n\n\n<li><strong>\u00c7\u0131kt\u0131:<\/strong> You receive JSON saying <code>\"total\": 5000<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 2: Calculate the Loops<\/strong><\/p>\n\n\n\n<p>Kullan\u0131m <strong>Set Variable<\/strong> module to calculate how many pages you need.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Formula:<\/strong> <code>{{ceil(1.data.total \/ 100)}}<\/code><\/li>\n\n\n\n<li><strong>Sonu\u00e7:<\/strong> 5000 \/ 100 = 50 pages.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 3: The Repeater<\/strong><\/p>\n\n\n\n<p>Add the <b id=\"flow-control-repeater\">Flow Control Repeater<\/b> Mod\u00fcl.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Initial value:<\/strong> 1<\/li>\n\n\n\n<li><strong>Repeats:<\/strong> Map the &#8220;Total Pages&#8221; variable you calculated in Step 2.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 4: The Paginated Request<\/strong><\/p>\n\n\n\n<p>Add your main <strong>HTTP mod\u00fcl\u00fc<\/strong> after the Repeater.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>URL:<\/strong> <code>...\/leads<\/code><\/li>\n\n\n\n<li><strong>Query String:<\/strong> Set <code>limit<\/code> i\u00e7in <code>100<\/code> ve <code>Sayfa<\/code> to the <code>i<\/code> value from the Repeater module.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 5: Aggregation<\/strong><\/p>\n\n\n\n<p>Do not process the data inside the loop immediately. Add an <b id=\"array-aggregator\">Array Aggregator<\/b> after the HTTP module.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Source Module:<\/strong> Repeater.<\/li>\n\n\n\n<li><strong>Hedef:<\/strong> Bu <code>data[]<\/code> array from your HTTP module.<\/li>\n<\/ul>\n\n\n\n<p><strong>Sonu\u00e7:<\/strong> The Repeater runs 50 times. The Aggregator waits for all 50 runs to finish. Then, it releases a single bundle containing all 5,000 leads. You can now map this massive array to your database in one go.<\/p>\n\n\n\n<p><strong>Thinkpeak.ai Pro Tip:<\/strong> If you are dealing with massive datasets (10k+ rows), the Array Aggregator might hit Make\u2019s memory limit. In that case, our Bespoke Engineering team uses streaming architectures to process data in batches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Method 3: Handling Cursor Pagination<\/h2>\n\n\n\n<p>Cursor pagination is tricky because you do not know how many pages exist. You must &#8220;keep going&#8221; until the API stops giving you a <code>next_token<\/code>. Make.com lacks a native <b id=\"do-while-loop\">Do-While loop<\/b>, so we must engineer one.<\/p>\n\n\n\n<p><strong>Mimari:<\/strong> We use a Repeater set to a high safety limit. We pass the &#8220;Cursor&#8221; token from one iteration to the next using Make\u2019s variable storage.<\/p>\n\n\n\n<p><strong>Step 1: Initialize the Token<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> Tools > Set Variable<\/li>\n\n\n\n<li><strong>Variable Name:<\/strong> <code>next_cursor<\/code><\/li>\n\n\n\n<li><strong>Value:<\/strong> Leave empty.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 2: The Safety Loop<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> Repeater<\/li>\n\n\n\n<li><strong>Repeats:<\/strong> 100 (or a number higher than you ever expect to reach).<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 3: Retrieve the Current Token<\/strong><\/p>\n\n\n\n<p>Inside the loop, grab the token from the previous run.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> Tools > Get Variable<\/li>\n\n\n\n<li><strong>Variable Name:<\/strong> <code>next_cursor<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Step 4: The <a href=\"https:\/\/thinkpeak.ai\/tr\/make-com-api-key-management\/\">Make.com API <\/a>Call<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> HTTP<\/li>\n\n\n\n<li><strong>Query String:<\/strong> Map <code>cursor<\/code> to the value from the Get Variable module.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 5: Update the Token<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> Tools > Set Variable<\/li>\n\n\n\n<li><strong>Variable Name:<\/strong> <code>next_cursor<\/code><\/li>\n\n\n\n<li><strong>Value:<\/strong> Map the <code>next_page_token<\/code> from the HTTP response body.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 6: The &#8220;Break&#8221; Logic<\/strong><\/p>\n\n\n\n<p>If the API returns no token, you must stop the Repeater.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module:<\/strong> Flow Control > Router (or a Filter)<\/li>\n\n\n\n<li><strong>Filter Condition:<\/strong> <code>next_cursor<\/code> (from the response) Does Not Exist.<\/li>\n\n\n\n<li><strong>Eylem:<\/strong> Error Handler > <strong>Commit<\/strong>. This forces the scenario to succeed and stop processing.<\/li>\n<\/ul>\n\n\n\n<p>This method works, but it is complex to debug. If you prefer a plug-and-play solution, check the templates at <a href=\"https:\/\/thinkpeak.ai\/tr\/\">Thinkpeak.ai<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Handling Rate Limits<\/h2>\n\n\n\n<p>When you paginate efficiently, you create a new problem: speed. You might hit the API 50 times in 2 seconds. This triggers a <b id=\"429-too-many-requests\">429 Too Many Requests<\/b> error.<\/p>\n\n\n\n<p><strong>The Solution: The Sleep Directive<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Right-click your HTTP module.<\/li>\n\n\n\n<li>Select <strong>&#8220;Add Error Handler&#8221;<\/strong>.<\/li>\n\n\n\n<li>Choose the <strong>Break<\/strong> directive.<\/li>\n\n\n\n<li>Configure <strong>Number of attempts<\/strong> to 3 and <strong>Interval<\/strong> to 60 seconds.<\/li>\n<\/ol>\n\n\n\n<p>This tells Make to wait 60 seconds and try again automatically if the API blocks you.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Blueprints for Success: Thinkpeak.ai\u2019s Approach<\/h2>\n\n\n\n<p>Pagination is just one layer of the &#8220;Data Integrity&#8221; stack. At <a href=\"https:\/\/thinkpeak.ai\/tr\/\">Thinkpeak.ai<\/a>, we transform these workflows into autonomous systems.<\/p>\n\n\n\n<p>Enterprise logic often requires more than standard methods. We implement <b id=\"cross-reference-pagination\">cross-reference pagination<\/b> to avoid duplicates. We use recursive webhooks for infinite pagination on millions of rows. We also build self-healing pipelines that automatically re-fetch missing intervals.<\/p>\n\n\n\n<p><strong>How We Help:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Otomasyon Pazaryeri:<\/strong> We provide &#8220;Universal API Paginator&#8221; templates. These pre-architected modules handle Offset, Cursor, and Header pagination out of the box.<\/li>\n\n\n\n<li><strong>Ismarlama Dahili Ara\u00e7lar:<\/strong> We build backend infrastructure for unique data logic. We ensure your internal portals show 100% of the data.<\/li>\n\n\n\n<li><strong>\u00d6zel Yapay Zeka Arac\u0131 Geli\u015ftirme:<\/strong> Pagination feeds your AI. Our <b id=\"digital-employees\">Dijital \u00c7al\u0131\u015fanlar<\/b> use rigorous data ingestion protocols to make accurate decisions.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ka\u00e7\u0131n\u0131lmas\u0131 Gereken Yayg\u0131n Tuzaklar<\/h2>\n\n\n\n<p><strong>1. The Infinite Loop<\/strong><\/p>\n\n\n\n<p>Your operations count drains to zero in minutes. This happens when your stop condition is wrong. Always set a hard limit on your Repeater while testing.<\/p>\n\n\n\n<p><strong>2. The Memory Crash<\/strong><\/p>\n\n\n\n<p>The scenario fails with a &#8220;RuntimeError: Memory limit exceeded.&#8221; This occurs when using an Array Aggregator on huge datasets. Fix this by processing data in batches. Aggregate 10 pages, upload them, clear memory, and continue.<\/p>\n\n\n\n<p><strong>3. The &#8220;Off-By-One&#8221; Error<\/strong><\/p>\n\n\n\n<p>You miss the first page or duplicate the last one. APIs index differently. Some start at page 0, others at page 1. Always manually test the first two requests in Postman or Make\u2019s DevTool.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sonu\u00e7<\/h2>\n\n\n\n<p>Handling pagination in Make.com separates amateur tinkerers from professional automation architects. You must master the Repeater module and understand cursor logic. This ensures your business decisions rely on complete, accurate data sets.<\/p>\n\n\n\n<p>Whether syncing leads or feeding an AI model, <b id=\"data-integrity\">data integrity<\/b> is non-negotiable.<\/p>\n\n\n\n<p>Ready to stop fixing broken loops and start building self-driving ecosystems? Visit <a href=\"https:\/\/thinkpeak.ai\/tr\/\">Thinkpeak.ai<\/a> for ready-to-use pagination templates or to contact our engineering team.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I handle pagination without using the Repeater module?<\/h3>\n\n\n\n<p>Yes, if the API supports it. You can use the native &#8220;Pagination&#8221; feature inside the HTTP module settings. However, this offers less visibility and error handling control than the Repeater method. Use the native feature for simple requests and the Repeater for complex logic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I handle APIs that put the &#8220;Next URL&#8221; in the Link Header?<\/h3>\n\n\n\n<p>You need to parse the header. In your HTTP module, map the <code>Header: Link<\/code> output. Use a <strong>Text Parser<\/strong> module with a regex pattern to extract the URL. Then, pass this URL into your next request loop variable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What happens if my scenario times out while paginating?<\/h3>\n\n\n\n<p>Make.com scenarios have a maximum execution time. If your pagination takes longer, use a <b id=\"recursive-architecture\">recursive architecture<\/b>. Split the job into smaller batches. Have the scenario call a Webhook at the end of its run to trigger the next batch in a fresh execution.<\/p>","protected":false},"excerpt":{"rendered":"<p>Make.com'da ofset, imle\u00e7 ve ba\u015fl\u0131k sayfalama i\u00e7in pratik k\u0131lavuz. Tekrarlay\u0131c\u0131 d\u00f6ng\u00fcleri, belirte\u00e7 kullan\u0131m\u0131, h\u0131z s\u0131n\u0131rlar\u0131 ve yayg\u0131n tuzaklar\u0131 i\u00e7erir.<\/p>","protected":false},"author":2,"featured_media":16693,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[103],"tags":[],"class_list":["post-16694","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business-process-automation"],"_links":{"self":[{"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/posts\/16694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/comments?post=16694"}],"version-history":[{"count":1,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/posts\/16694\/revisions"}],"predecessor-version":[{"id":17147,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/posts\/16694\/revisions\/17147"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/media\/16693"}],"wp:attachment":[{"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/media?parent=16694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/categories?post=16694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thinkpeak.ai\/tr\/wp-json\/wp\/v2\/tags?post=16694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}