<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sunn</title>
    <description>The latest articles on DEV Community by sunn (@sunxnx).</description>
    <link>https://dev.to/sunxnx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4113169%2F690c26da-0a82-4a22-b5c4-a09a9511617c.png</url>
      <title>DEV Community: sunn</title>
      <link>https://dev.to/sunxnx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sunxnx"/>
    <language>en</language>
    <item>
      <title>BulkOps for Xero: the bulk jobs Xero does one at a time, in one run</title>
      <dc:creator>sunn</dc:creator>
      <pubDate>Thu, 10 Sep 2026 06:27:50 +0000</pubDate>
      <link>https://dev.to/sunxnx/bulkops-for-xero-the-bulk-jobs-xero-does-one-at-a-time-in-one-run-5pg</link>
      <guid>https://dev.to/sunxnx/bulkops-for-xero-the-bulk-jobs-xero-does-one-at-a-time-in-one-run-5pg</guid>
      <description>&lt;p&gt;&lt;em&gt;I'm the one person behind BulkOps, a Xero add-on. This is a product introduction, not a tutorial — the how-to articles are linked at the end.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Xero handles most accounting work well. A handful of jobs, though, are one-item-at-a-time by design: applying a credit note to an invoice, allocating an overpayment, downloading an attachment, archiving a tracking option. For a few items that's fine. After a migration, a returns-heavy quarter, or an audit request, the same job arrives as hundreds of items, and the interface has no bulk action for it.&lt;/p&gt;

&lt;p&gt;BulkOps for Xero runs those jobs as one batch.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Credit note and overpayment allocation&lt;/strong&gt; — scans every unallocated credit note or overpayment and every open invoice, proposes matches per contact (exact amounts first, then oldest invoices first), and applies the ones you approve.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch payment runs with credit notes&lt;/strong&gt; — builds Xero batch payments that net credits against supplier bills, split into Xero's 200-line batches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attachment export&lt;/strong&gt; — every file attached to invoices, bills and credit notes in a date range, as one ZIP grouped by document number, with a manifest. Read-only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracking option archive&lt;/strong&gt; — archive a whole category or a selected list of options in one job, including options already used on transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it behaves
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Connects through Xero's official sign-in (OAuth). No Xero password is ever seen or stored. Tokens are encrypted at rest. The exact permissions are listed in plain language before you consent: &lt;a href="https://bulkops.microspear.app/connect" rel="noopener noreferrer"&gt;https://bulkops.microspear.app/connect&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Every change is previewed line by line before anything is written. Untick what you don't want.&lt;/li&gt;
&lt;li&gt;Jobs run server-side under Xero's API limits. A 1,400-item run that hits the daily limit pauses and resumes by itself; you get an email when it finishes.&lt;/li&gt;
&lt;li&gt;Every write job has a one-click undo and a CSV audit trail with before/after state. Exports delete themselves after 7 days.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;p&gt;Bookkeepers and finance teams on Xero who meet these jobs in volume: businesses that just migrated and have a backlog of unallocated credits, returns- or rebates-heavy trading, accountants closing several client organisations at once, and anyone asked for a year of source documents by an auditor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;Previews are unlimited and free, and the first 10 executed items are free with no card.&lt;/p&gt;

&lt;p&gt;After that there is one thing to buy, and no subscription:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pass — US$29 one-off. Up to 1,000 executed items in one organisation, 72 hours after payment to start your jobs (a job that has started runs to the end), all four features, undo never counted. Details: &lt;a href="https://bulkops.microspear.app/cleanup" rel="noopener noreferrer"&gt;https://bulkops.microspear.app/cleanup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Over 1,000 items, or several organisations at once: email &lt;a href="mailto:support@microspear.app"&gt;support@microspear.app&lt;/a&gt; for a custom arrangement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to find it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Product: &lt;a href="https://bulkops.microspear.app" rel="noopener noreferrer"&gt;https://bulkops.microspear.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Step-by-step guides (manual method first, tool second): &lt;a href="https://bulkops.microspear.app/guides" rel="noopener noreferrer"&gt;https://bulkops.microspear.app/guides&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Verified listing on SaaSHub: &lt;a href="https://www.saashub.com/bulkops-app" rel="noopener noreferrer"&gt;https://www.saashub.com/bulkops-app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open notes on which Xero bulk features people ask for most: &lt;a href="https://github.com/ericlimm/xero-bulk-operations" rel="noopener noreferrer"&gt;https://github.com/ericlimm/xero-bulk-operations&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If it doesn't fit your setup, email &lt;a href="mailto:support@microspear.app"&gt;support@microspear.app&lt;/a&gt; and tell me why. That's the most useful thing you can send me.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>xero</category>
      <category>accounting</category>
      <category>saas</category>
    </item>
    <item>
      <title>Migrated to Xero and inherited hundreds of unallocated credits? How to size the backlog, the manual steps, and clearing it in one run</title>
      <dc:creator>sunn</dc:creator>
      <pubDate>Wed, 09 Sep 2026 06:43:58 +0000</pubDate>
      <link>https://dev.to/sunxnx/migrated-to-xero-and-inherited-hundreds-of-unallocated-credits-how-to-size-the-backlog-the-manual-np7</link>
      <guid>https://dev.to/sunxnx/migrated-to-xero-and-inherited-hundreds-of-unallocated-credits-how-to-size-the-backlog-the-manual-np7</guid>
      <description>&lt;p&gt;&lt;em&gt;Full disclosure: I build BulkOps, the tool mentioned at the end. The manual steps and the sizing table apply whether or not you use it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Last updated: September 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Short answer: &lt;strong&gt;conversions leave credits unallocated because the import brings the documents across, not the links between them.&lt;/strong&gt; Opening balances from Sage, MYOB, QuickBooks or a spreadsheet arrive as separate invoices and credit notes; receipts that were matched to a contact rather than to an invoice come over as overpayments; historical credits become standalone credit notes. Each one is correct on its own — it is just not applied to anything yet. In Xero, allocation is done one document at a time, so a migration that leaves hundreds of unallocated credit notes and overpayments behind turns into a long tidy-up. This guide covers how to size the backlog, the manual steps, and how to clear it in one run.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to tell how big the backlog is
&lt;/h2&gt;

&lt;p&gt;Before deciding how to clear unallocated credits in Xero, count them. Three places show the same picture from different angles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Business → Sales overview&lt;/strong&gt; and &lt;strong&gt;Business → Purchases overview&lt;/strong&gt;: the credit notes and overpayments figures show the total still awaiting allocation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aged Receivables&lt;/strong&gt; and &lt;strong&gt;Aged Payables&lt;/strong&gt; reports: negative or credit lines against a contact are unallocated credits sitting next to open invoices — the usual sign of a migration that brought both sides over separately.&lt;/li&gt;
&lt;li&gt;A contact's &lt;strong&gt;transactions&lt;/strong&gt; tab: open a few of the largest accounts and look for credit notes and overpayments still awaiting payment alongside open invoices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a simple count, open &lt;strong&gt;Business → Credit notes&lt;/strong&gt;, filter to awaiting payment and note the number of rows; do the same for overpayments from the contact or bank account screens. Add the receivables and payables sides together — that is the size of the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual process (one credit at a time)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the credit note or overpayment, either from the contact's transactions or from the sales or purchases overview.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Options → Allocate credit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the amount to apply against each open invoice or bill for that contact.&lt;/li&gt;
&lt;li&gt;Save, then move on to the next credit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A few rules apply: the credit and the invoice must belong to the same contact and use the same currency, and only approved documents can be allocated. Each item takes roughly 30 to 60 seconds once you are in a rhythm, which scales like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Unallocated items&lt;/th&gt;
&lt;th&gt;Manual time (approx.)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;1–2 hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;1–2 working days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;Several weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a small conversion the manual route is fine. For the post-migration or year-end backlog most practices inherit, it is worth doing in one pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing it in one run
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bulkops.microspear.app" rel="noopener noreferrer"&gt;BulkOps&lt;/a&gt; (built by us) connects to your Xero organisation through Xero's official sign-in and bulk allocates credits after conversion in a single job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It scans every unallocated credit note and overpayment, on both the customer and supplier side, together with every open invoice and bill.&lt;/li&gt;
&lt;li&gt;For each contact it proposes matches — exact-amount matches first, then the oldest open invoice — keeping to the same contact and currency.&lt;/li&gt;
&lt;li&gt;You see &lt;strong&gt;every proposed line in a preview&lt;/strong&gt; and untick anything before a single write happens. Items with no sensible match are listed, not guessed.&lt;/li&gt;
&lt;li&gt;Approved lines run as a queued job under Xero's API limits. Xero applies a daily limit per organisation, so a very large backlog takes more than one day: the job pauses itself when the limit is reached and resumes automatically, with progress visible throughout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One click undoes the whole job&lt;/strong&gt;, and every write is logged with before and after state in a CSV audit trail you can file with the migration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can try the whole flow on Xero's Demo Company first, and previews on your own organisation are free and unlimited. The first 10 executed items are free as well, so you can check real results before paying anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-off job, one-off price
&lt;/h2&gt;

&lt;p&gt;A migration clean-up is a one-time job, so it does not need a monthly plan. BulkOps sells exactly one thing: a &lt;a href="https://bulkops.microspear.app/cleanup" rel="noopener noreferrer"&gt;pass&lt;/a&gt; at US$29 one-off, no subscription. It covers up to 1,000 executed items in one organisation, you have 72 hours after payment to start your jobs (a job that has started runs to the end), and it comes with the same preview, undo and audit CSV as every BulkOps job. Undo is never counted. Nothing renews afterwards. If the backlog is over 1,000 items, or you need several organisations connected at once, email &lt;a href="mailto:support@microspear.app"&gt;support@microspear.app&lt;/a&gt; before you start.&lt;/p&gt;

&lt;p&gt;Related guides: &lt;a href="https://bulkops.microspear.app/guides/bulk-credit-note-allocation-xero" rel="noopener noreferrer"&gt;bulk allocating credit notes&lt;/a&gt;, &lt;a href="https://bulkops.microspear.app/guides/bulk-allocate-overpayments-xero" rel="noopener noreferrer"&gt;bulk allocating overpayments&lt;/a&gt; and &lt;a href="https://bulkops.microspear.app/guides/remove-credit-note-allocation-xero" rel="noopener noreferrer"&gt;removing an allocation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Will allocating credits change my reported revenue?
&lt;/h3&gt;

&lt;p&gt;No. Allocation links documents that already exist — the credit note or overpayment and the invoice — so nothing is added to the profit and loss. What changes is the contact’s outstanding balance and what appears on statements and aged reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  What if a credit doesn’t match any invoice?
&lt;/h3&gt;

&lt;p&gt;It stays unallocated. BulkOps only proposes matches it can justify (same contact, same currency, an open approved invoice); anything it cannot place is listed separately so you can deal with it by hand or refund it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I undo a bulk allocation?
&lt;/h3&gt;

&lt;p&gt;Yes. One click removes every allocation the job made, and the audit CSV records each line with its before and after state.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does a 5,000-item backlog take?
&lt;/h3&gt;

&lt;p&gt;It is bounded by Xero’s daily API limit rather than by BulkOps, so a backlog that size usually spans more than one day. The job pauses itself when the limit is reached, resumes automatically, and emails you when it finishes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does this work for supplier credits too?
&lt;/h3&gt;

&lt;p&gt;Yes. Credit notes on bills and supplier overpayments are matched to open bills for the same supplier, in the same way customer credits are matched to invoices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bulkops.microspear.app/connect" rel="noopener noreferrer"&gt;Connect your Xero organisation&lt;/a&gt; (or the Demo Company) and preview the backlog for free — no card required. When you are ready to run it, one &lt;a href="https://bulkops.microspear.app/cleanup" rel="noopener noreferrer"&gt;pass&lt;/a&gt; clears it in one job.&lt;/p&gt;

</description>
      <category>xero</category>
      <category>accounting</category>
      <category>saas</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Archiving tracking options in Xero one at a time? The manual steps, delete vs archive, and a reversible bulk job</title>
      <dc:creator>sunn</dc:creator>
      <pubDate>Tue, 08 Sep 2026 06:06:19 +0000</pubDate>
      <link>https://dev.to/sunxnx/archiving-tracking-options-in-xero-one-at-a-time-the-manual-steps-delete-vs-archive-and-a-d53</link>
      <guid>https://dev.to/sunxnx/archiving-tracking-options-in-xero-one-at-a-time-the-manual-steps-delete-vs-archive-and-a-d53</guid>
      <description>&lt;p&gt;&lt;em&gt;Full disclosure: I'm the developer of BulkOps, a Xero add-on. The manual process below is accurate regardless of whether you use it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you use tracking categories in Xero for job numbers, projects, events or locations, the option list only ever grows. Finished jobs stay in every pick-list until someone archives them, and in Xero options are archived &lt;strong&gt;one at a time&lt;/strong&gt;. For a few finished jobs that is fine. With hundreds it is a long session of clicking, which is why bulk archiving is a popular request on Xero's idea board (150+ votes).&lt;/p&gt;

&lt;p&gt;Here is the manual route, the difference between deleting and archiving, and how to archive hundreds of options in one reversible job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual process
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings (Organisation settings) → Advanced settings → Tracking categories&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the category (for example "Job Number").&lt;/li&gt;
&lt;li&gt;Next to a single option, open the menu and choose &lt;strong&gt;Archive&lt;/strong&gt;. Confirm.&lt;/li&gt;
&lt;li&gt;Repeat for every option. Each one is archived individually.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Archiving does not delete history. Archived options keep their transactions and reporting; they just stop appearing in pick-lists. That is exactly why regular cleanup is worth doing: the reports stay intact and the people entering transactions stop scrolling past two years of finished jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting vs archiving
&lt;/h2&gt;

&lt;p&gt;Xero deletes an option only if it has never been used on a transaction. Anything that has been used can only be archived. So for real-world cleanup (finished jobs with history), archiving is the only route, bulk or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more than it looks
&lt;/h2&gt;

&lt;p&gt;Xero allows two active tracking categories per organisation, with a limit on active options in each (100 on most plans). Organisations that track jobs or events hit that ceiling, and at that point you cannot add the next job number until old ones are archived. Cleanup stops being tidiness and becomes the thing blocking data entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Archiving hundreds of options at once
&lt;/h2&gt;

&lt;p&gt;BulkOps (built by me) connects via Xero's official OAuth and turns the cleanup into one job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It lists every tracking category and option in your organisation, active and archived.&lt;/li&gt;
&lt;li&gt;Tick the options to archive, individually or a whole category at once, and review the list before anything runs.&lt;/li&gt;
&lt;li&gt;They are archived as a background job under Xero's API rate limits, with a per-item result. It works for options that are in use on transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully reversible:&lt;/strong&gt; one click restores everything a job archived, and every change is logged to a CSV audit trail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previews are unlimited and free, and the first 10 archived options cost nothing, no card required, and a US$29 one-off pass (no subscription) covers up to 1,000 items after that: &lt;a href="https://bulkops.microspear.app/guides/bulk-archive-tracking-categories-xero" rel="noopener noreferrer"&gt;https://bulkops.microspear.app/guides/bulk-archive-tracking-categories-xero&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does archiving a tracking option affect old reports?&lt;/strong&gt;&lt;br&gt;
No. Historical transactions and reporting keep the option; it only leaves the pick-lists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I restore an archived option?&lt;/strong&gt;&lt;br&gt;
Yes. Restoring makes it active again, in Xero one at a time or in BulkOps as the undo button on any archive job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there a limit on tracking categories?&lt;/strong&gt;&lt;br&gt;
Two active tracking categories per organisation, with up to 100 active options each on most plans. Another reason to keep them pruned.&lt;/p&gt;

</description>
      <category>xero</category>
      <category>accounting</category>
      <category>saas</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Need every attachment out of Xero for a date range? The manual steps, what the API offers, and a one-ZIP export</title>
      <dc:creator>sunn</dc:creator>
      <pubDate>Tue, 08 Sep 2026 06:06:15 +0000</pubDate>
      <link>https://dev.to/sunxnx/need-every-attachment-out-of-xero-for-a-date-range-the-manual-steps-what-the-api-offers-and-a-4n2o</link>
      <guid>https://dev.to/sunxnx/need-every-attachment-out-of-xero-for-a-date-range-the-manual-steps-what-the-api-offers-and-a-4n2o</guid>
      <description>&lt;p&gt;&lt;em&gt;Full disclosure: I'm the developer of BulkOps, a Xero add-on. The manual process below is accurate regardless of whether you use it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every so often someone needs &lt;em&gt;all&lt;/em&gt; the files attached to their Xero documents for a period: an audit sample, a handover to a new accountant, closing a business, or migrating to another system. Reports and ledgers come out of Xero as CSV in a couple of clicks. The attachments do not, and that catches people out at the worst possible moment.&lt;/p&gt;

&lt;p&gt;Here is what actually happens inside Xero, what the API offers, and how to get a whole date range out as one ZIP.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual process (one file at a time)
&lt;/h2&gt;

&lt;p&gt;Attachments in Xero live on individual documents. To get them out through the interface:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Business → Invoices&lt;/strong&gt; (or Bills, or Credit notes) and open a document.&lt;/li&gt;
&lt;li&gt;Click the attachment icon to list its files.&lt;/li&gt;
&lt;li&gt;Open each file and download it.&lt;/li&gt;
&lt;li&gt;Rename the download so you can tell later which document it belonged to.&lt;/li&gt;
&lt;li&gt;Repeat for every document, and every file on it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a handful of documents this is fine. For a year of trading with attachments on even a third of your documents, it is hundreds of clicks, and step 4 is where files quietly lose their link to the transaction they support.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Files library and exports cover (and don't)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Xero's &lt;strong&gt;Files&lt;/strong&gt; library only holds files uploaded to the library itself. Attachments added on an invoice or bill are not in it.&lt;/li&gt;
&lt;li&gt;Xero's data exports (CSV, reports, the general ledger) cover transaction data, not the attached documents.&lt;/li&gt;
&lt;li&gt;Continuous backup services mirror your whole organisation on a subscription. They solve insurance, not the "give me this year's source documents as files, today" problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if the files you need are the ones clipped to documents, the interface route is the per-document download above.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the API offers
&lt;/h2&gt;

&lt;p&gt;Xero's official Attachments API lists and serves the files on invoices, bills, credit notes and other documents, under a &lt;strong&gt;read-only&lt;/strong&gt; permission scope (&lt;code&gt;accounting.attachments.read&lt;/code&gt;). Two things to know if you go the script route:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is one request per document to list attachments, then one per file to download. A year of documents means thousands of calls.&lt;/li&gt;
&lt;li&gt;Requests count against Xero's daily API limit per organisation, so a large export has to pace itself and resume the next day. That is the part people usually discover after the script has been running for an hour.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Exporting every attachment for a date range as one ZIP
&lt;/h2&gt;

&lt;p&gt;BulkOps (built by me) connects through Xero's official OAuth with the read-only attachment scope and turns the above into one job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick a date range and document types (invoices, bills, credit notes). It scans for every document that has attachments and shows you the list before anything runs.&lt;/li&gt;
&lt;li&gt;The export runs server-side as a queued job, paced under Xero's API limits. You can close the browser; big exports email you when they finish, and if the daily limit is hit the job pauses and resumes by itself.&lt;/li&gt;
&lt;li&gt;Files keep their link to the source document: each file is grouped under its invoice or bill number, with a manifest, and downloads as one ZIP or individually.&lt;/li&gt;
&lt;li&gt;Nothing in Xero changes. The operation is read-only. Exported copies stay available for 7 days and are then deleted from our servers automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previews are unlimited and free, and the first 10 exported documents are free with no card, and a US$29 one-off pass (no subscription) covers up to 1,000 items after that: &lt;a href="https://bulkops.microspear.app/guides/bulk-export-xero-attachments" rel="noopener noreferrer"&gt;https://bulkops.microspear.app/guides/bulk-export-xero-attachments&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can you download all attachments from Xero at once?&lt;/strong&gt;&lt;br&gt;
In Xero's own interface, attachments are downloaded per document. Bulk export is one of the most-supported requests on Xero's idea board (nearly 700 votes); BulkOps provides it as a read-only export grouped by document.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does exporting attachments change anything in Xero?&lt;/strong&gt;&lt;br&gt;
No. Reading and downloading attachments is read-only. Documents, amounts and the files themselves stay exactly as they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do auditors usually ask for?&lt;/strong&gt;&lt;br&gt;
Typically the source documents (supplier invoices, receipts, credit adjustments) for a date range or a sample of transactions. That means the files attached to specific invoices, bills and credit notes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One practical tip if you are closing an organisation:&lt;/strong&gt; do the export before cancelling the subscription. Attachments are only reachable through the interface and the API while the organisation is active.&lt;/p&gt;

</description>
      <category>xero</category>
      <category>accounting</category>
      <category>saas</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Need bulk credit note allocation in Xero? The manual steps, and a tool that does it in one run</title>
      <dc:creator>sunn</dc:creator>
      <pubDate>Mon, 07 Sep 2026 05:35:32 +0000</pubDate>
      <link>https://dev.to/sunxnx/xero-has-no-bulk-credit-note-allocation-heres-the-manual-process-and-what-i-built-instead-58bb</link>
      <guid>https://dev.to/sunxnx/xero-has-no-bulk-credit-note-allocation-heres-the-manual-process-and-what-i-built-instead-58bb</guid>
      <description>&lt;p&gt;&lt;em&gt;Full disclosure: I'm the developer of BulkOps, a Xero add-on. The manual steps below work with or without it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you run a rebates-heavy or returns-heavy business on Xero, month-end usually includes one specific chore: applying dozens or hundreds of credit notes to open invoices. Xero handles this one credit note at a time — bulk allocation is a long-standing request on Xero's Product Ideas board (480+ votes) — so if you need it done in bulk, here is the manual process and the tool I built for exactly this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual steps in Xero
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Business → Invoices (or Credit notes). Open an unallocated credit note.&lt;/li&gt;
&lt;li&gt;Credit note options → &lt;strong&gt;Allocate credit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the amount to apply against each open invoice for that contact. Save.&lt;/li&gt;
&lt;li&gt;Repeat for the next credit note.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Four to six clicks plus typing per credit note. Fine for a handful; at a hundred or more it becomes an afternoon.&lt;/p&gt;

&lt;p&gt;Worth knowing: allocation is same contact only and same currency only, and only approved documents appear on the screen. CSV import doesn't apply credits — it creates documents.&lt;/p&gt;

&lt;p&gt;If money actually moved, bank reconciliation's Find &amp;amp; Match can clear some items. For credit notes that should simply offset open invoices, the allocation screen is the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing it in one run with BulkOps
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bulkops.microspear.app" rel="noopener noreferrer"&gt;BulkOps&lt;/a&gt; connects with Xero's official OAuth and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scans every unallocated credit note and open invoice, and proposes matches (same contact; exact amounts first, then oldest invoices first)&lt;/li&gt;
&lt;li&gt;shows the full preview line by line — you untick anything before a single write happens&lt;/li&gt;
&lt;li&gt;runs the approved batch as a job under Xero's API rate limits (a 1,400-allocation run paused on the daily limit and resumed on its own the next morning)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;undoes an entire job in one click&lt;/strong&gt; — Xero's API allows removing allocations, and every write is logged with before/after state and exportable as CSV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also does overpayment allocation, batch payment runs that include credit notes, bulk attachment export, and bulk tracking-option archiving — the other bulk jobs people ask for on the same board.&lt;/p&gt;

&lt;p&gt;Previews are unlimited and free; the first 10 executed allocations are free, no card. After that there is one thing to buy: a pass, US$29 one-off with no subscription. It covers up to 1,000 executed items in one organisation, you have 72 hours after payment to start your jobs (a job that has started runs to the end), all four features are included, and undo is never counted. If it doesn't fit your setup, email &lt;a href="mailto:support@microspear.app"&gt;support@microspear.app&lt;/a&gt; and tell me why — that's genuinely useful to me.&lt;/p&gt;

&lt;p&gt;Full guide with the FAQ: &lt;a href="https://bulkops.microspear.app/guides/bulk-credit-note-allocation-xero" rel="noopener noreferrer"&gt;https://bulkops.microspear.app/guides/bulk-credit-note-allocation-xero&lt;/a&gt;&lt;/p&gt;

</description>
      <category>xero</category>
      <category>accounting</category>
      <category>saas</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
