---
title: "ERP Integration Without an API: Options & Assessment"
canonical: https://wavect.io/blog/legacy-erp-integration-without-api/
language: en
description: "Integrate a legacy ERP without an API: compare file exchange, approved database reads, middleware, RPA and replacement, with failure tests and assessment scope."
image: "https://wavect.io/img/blog/headers/header_legacy-erp-integration-without-api.png"
---

[**Back**](/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/team/kevin-riedl/)

[Kevin Riedl](/team/kevin-riedl/) https://linkedin.com/in/wsdt

16 min read · 29 Sep 2026 Last reviewed September 29, 2026

[**Next**](/blog/odoo-erp-api-integration-limits-2026/)

# Integrating an ERP Without an API: File Exchange, Database Access, RPA, or Replacement?

TL;DR

Assess the business operation before choosing the technology. Supported file exchange can fit batch work; approved read-only access can fit reporting. Middleware coordinates real interfaces but cannot invent safe ERP writes. UI automation needs a supported session model and verifiable outcomes. Stop unattended submission when an unknown result cannot be resolved safely. A paid feasibility assessment should document access, data meaning, representative tests, recovery, operating costs and a conditional go or no-go.

**You can integrate some legacy ERP workflows without a modern API.** Start by checking supported file imports and exports, licensed integration modules and approved read-only data access. Use middleware to coordinate those interfaces. Consider UI automation only where the actual deployment and recovery process are viable; consider replacement when the required business outcome cannot be supported safely.

The question is not whether somebody can move data once. It is whether the business can distinguish an accepted transaction from a rejected, duplicated or still-unknown one, and keep doing so after an ERP upgrade or a failed overnight run.

This guide compares decision criteria for **legacy ERP integration without an API**, not connector prices or a generic ERP selection exercise. Product documentation was reviewed on 29 September 2026. Named systems illustrate specific interface boundaries, not a claim that those products lack APIs or that the same features exist in your installed version. Recommendations and scenarios below are our assessment framework, not results from a hands-on ERP benchmark.

## What does “ERP without an API” actually mean?

Write down the product, edition, exact version, hosting arrangement and support provider before choosing a technology. Ask whether “no API” means no REST endpoint, no licensed access, no documentation, no access from the network, or no interface for the particular business operation. Those are different feasibility problems.

Ask the vendor about a supported SDK, SOAP service, EDI interface, scheduled report, command-line importer or documented staging mechanism. A paid module might solve the problem more cleanly than screen automation. Verify its object coverage and recurring entitlement before treating a brochure or partner demonstration as proof.

Separate **read**, **write** and **post or approve**. Reading stock for a dashboard does not reserve stock. Creating an order draft does not authorize its release. Exporting invoice lines does not prove that a payment was allocated. Describe the accepted business state, including who is allowed to cause it.

For an ERP that already exposes an API, our [Odoo API integration limits guide](/blog/odoo-erp-api-integration-limits-2026/) addresses a different problem: designing around an available API's constraints. Here, the first deliverable is an evidence-backed inventory of usable interfaces, not a new backend.

## File exchange, database access, middleware, RPA or replacement?

Choose an access method per operation, not one technology for the entire company. A reasonable result might combine a read-only reporting feed with a supported order import and a manual exception queue.

| Approach | A credible fit when | Evidence required before proceeding |
| --- | --- | --- |
| Supported file exchange | The required objects have documented imports or exports, and batch timing fits the operation. | Object-level results, field rules, repeat-submission behavior, scheduling and supported recovery. |
| Approved read-only database access | The goal is extraction or reporting through an approved data surface. | Data meaning, permissions, consistency, query load, deletion detection and an accepted freshness limit. |
| Middleware | Usable interfaces exist but mapping, scheduling, state tracking or exception handling are missing. | The actual endpoint or file contract on each side. Middleware does not create an ERP write capability by itself. |
| UI automation / RPA | A bounded workflow must use the interface and can run with approved identities and observable outcomes. | A representative session test, stable targeting, business-state verification, capacity and human recovery. |
| Replacement or staged modernization | Essential requirements have no supportable route, or sustaining the workaround is unacceptable. | Data ownership, migration and cutover scope, business continuity, reconciliation and funded operation of the target. |

This is narrower than a general [custom software versus off-the-shelf decision](/software-development-guide/custom-software-vs-off-the-shelf/). An integration assessment can legitimately recommend keeping the ERP, buying an existing module or retaining one manual step.

## When supported file exchange is enough

Do not dismiss CSV or XML because the transport looks old. Microsoft documents file mappings, transformations and validation hooks in Business Central's data exchange framework. [Microsoft: file mapping and validation](https://learn.microsoft.com/en-us/dynamics365/business-central/across-how-to-set-up-data-exchange-definitions) That is evidence of structured file-processing capabilities, not proof that every document type in every deployment has an unattended importer.

Obtain the actual specification and sample accepted and rejected files. Confirm character encoding, date and decimal formats, currency, units, leading zeros, nulls, company identifiers and master-data prerequisites. Establish whether a multi-line document is accepted as a whole or can leave partial state. A bank-file feature is not automatically a sales-order interface.

Define the handoff contract: immutable batch identifier, individual source references, schema version, record count, integrity check and a clearly signaled completion boundary. Consumers must not process unfinished uploads. WinSCP documents a temporary-name-then-rename mechanism for SFTP binary transfers. [WinSCP: completed-upload handoff](https://winscp.net/eng/docs/resume) Test the chosen server's behavior and configure the importer to ignore temporary files; do not assume every FTP or shared-folder setup has the same semantics.

Then distinguish receipt from acceptance. NetSuite's CSV status documentation notes that an `afterSubmit` error can occur after a record was created or updated; the whole import should not be repeated for that case. [Oracle: NetSuite import outcomes](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N350581.html) An error label alone therefore cannot decide the retry policy.

A production-ready file workflow should expose which source objects became which ERP documents, which failed validation and which still need investigation. Agree the retention period for source files and evidence, with sensitive fields minimized. Include the scheduler, credentials, storage, monitoring and manual exceptions in the operating estimate. A person uploading a file every day remains part of the process until unattended execution is actually supported and tested.

## What approved read-only database access can and cannot solve

Ask for a documented reporting view, supported query service or approved replica before asking for unrestricted production database credentials. NetSuite's SuiteAnalytics Connect, for example, is explicitly read-only and cannot update NetSuite data. [Oracle: the Connect read-only boundary](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_3963845427.html) A supported query surface and direct access to an application's physical tables are not interchangeable.

**Do not turn a read-only proposal into undocumented writes to ERP transaction tables.** SAP Business One's SDK Recordset documentation permits DML for user tables but warns that system-table writes are unsupported and risk corruption. [SAP: Recordset support boundaries](https://help.sap.com/doc/089315d8d0f8475a9fc84fb919b501a3/10.0/en-US/SDKHelp/SAPbobsCOM~Recordset.html) That is a specific SAP interface rule, not a universal claim about every ERP contract. Vendor-approved staging tables or documented business-object interfaces need their own review.

For extraction, have the ERP owner explain each field's business meaning. Is “quantity” physical stock, available stock or allocated stock? Does an amount include tax? Which company and document status does a row belong to? Join keys and source timestamps alone are not a data contract.

Read-only does not mean operationally harmless or automatically consistent. Microsoft warns that SQL Server `NOLOCK`/`READUNCOMMITTED` can expose uncommitted data and duplicate or omit records. [Microsoft: SQL read-consistency warnings](https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver17) Do not prescribe that hint as a universal cure for integration load. Ask the DBA to approve the consistency strategy, timeouts, query plan and workload window; test alongside representative ERP activity.

For incremental extraction, prove how updates, deletions and corrections are discovered. SQL Server change tracking requires checking the retained minimum version; an expired synchronization position needs reinitialization. [Microsoft: recovering change-tracking consumers](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/work-with-change-tracking-sql-server?view=sql-server-ver17) Enabling change tracking or CDC is a separate administrative and support decision, not an automatic right granted by read access. A modified-date filter is not proof that deletions or late corrections will be captured.

Specify an initial snapshot, a recoverable synchronization position and a periodic comparison with the authoritative ERP view. Also specify what downstream users see when the feed becomes stale. A reporting copy must not quietly become the authority for stock reservations or financial posting.

## What middleware adds, and what it cannot invent

Middleware can own mappings, schedules, queues, credentials, identifiers and exception routing. It can expose an API to a new portal while using a file or approved query interface behind it. The portal's API is then your integration contract, not a new transactional API magically added to the ERP.

Network connectivity is another separate concern. Microsoft's on-premises data gateway uses outbound connections rather than requiring inbound ports. [Microsoft: gateway connection model](https://learn.microsoft.com/en-us/data-integration/gateway/service-gateway-onprem) That deployment option does not grant permission to a database or add a missing business operation. Verify the chosen gateway's supported sources, ownership and upgrade obligations.

Keep a durable record per business object: source system and company, source identifier, operation, payload version or hash, ERP identifier, observed state and next permitted action. Track received, validated, submitted, confirmed, rejected and outcome-unknown separately. Never display “synced” merely because a file was uploaded or a job was queued.

AWS's idempotency guidance distinguishes request identity from identical content and explains why the deduplication record and mutation need atomic handling. [AWS: request identity and safe retries](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/) Applied to a legacy integration, our conclusion is limited: a middleware log alone cannot guarantee exactly-once ERP effects. A crash can happen after the ERP commits but before your log records success.

Before retrying, prove a supported lookup by stable reference or another trustworthy confirmation mechanism. Where available, test target-side uniqueness under concurrent submission. Reusing the same identifier with changed content must trigger an explicit conflict or approved update process, not silently become a second order. Where certainty is unavailable, stop for investigation rather than converting an unknown result into a duplicate.

## When UI automation is a reasonable boundary

Use UI automation as a candidate for a specific workflow, not the default answer to “ERP integration no API.” UiPath documents selectors based on element attributes rather than only coordinates; changing layouts or dynamic attributes still require care. [UiPath: selector behavior](https://docs.uipath.com/activities/other/latest/ui-automation/about-selectors) Test the actual legacy client, not a modern demonstration application.

The deployment topology matters. Power Automate's unattended documentation identifies session restrictions and warns that unattended display resolution can differ from the development session. [Microsoft: unattended-session constraints](https://learn.microsoft.com/en-us/power-automate/desktop-flows/run-unattended-desktop-flows) A flow working while a developer watches is insufficient evidence for the overnight operating model.

Virtual desktops need their own check. Microsoft's Power Automate documentation requires its virtual-desktop agent for supported remote automation and lists platform limitations. [Microsoft: virtual-desktop requirements](https://learn.microsoft.com/en-us/power-automate/desktop-flows/virtual-desktops) Confirm the exact RDP or Citrix configuration, installation approval and version compatibility; do not assume remote screen access provides the same element controls as a local installation.

Our proposed release conditions are explicit input validation, approved credentials, a permitted session model, verification of the selected company and record, and an authoritative result check. Keep a human approval step where the business impact requires it. Do not disable MFA, endpoint protection or patching just to keep a bot running.

Measure representative throughput including login, waiting, validation dialogs and exception handling. Test concurrent human use, timeouts, expired credentials, changed labels, a locked record and a restarted machine. Define an owner for failed runs and a maximum tolerable backlog.

Computer-use models do not remove these acceptance conditions. A model-generated click still needs permission, bounded inputs and proof of the resulting business state. For sensitive posting or payments, a screenshot that appears successful is not a sufficient basis for an automatic retry or release. A useful outcome can be attended document preparation with the final decision retained by an employee.

## Failure handling: 120 submissions are not 120 completed transactions

**Illustrative scenario, not a customer result:** a batch contains 120 source orders. The integration confirms 117 ERP documents, has two definitive validation rejections and loses the response for one submission. The reconciliation is **120 = 117 confirmed + 2 rejected + 1 outcome unknown**, not “three failures to retry.”

Keep the 117 confirmed source-to-ERP mappings. Correct the two rejected orders and resubmit only after establishing that no business document was committed. For the unknown one, search through the approved interface using its stable reference and inspect the relevant state. Do not blindly replay the whole batch. Without a reliable way to resolve the unknown result, unattended submission has failed an important feasibility gate.

Counts are only the first check. Compare business identifiers, company, document status, line quantities, currency and relevant totals. Test revisions, cancellations and out-of-order delivery. An equal total can conceal the wrong document allocation, so preserve object-level evidence rather than a single green dashboard number.

Recovery is not always a technical rollback. Microsoft describes compensation as business-specific and potentially requiring manual intervention. [Microsoft: business-specific compensation](https://learn.microsoft.com/en-us/azure/architecture/patterns/compensating-transaction) For an ERP integration, agree supported cancellation, correction or reversal paths with the business owner. Do not delete transactional rows or restore the entire production database to undo one duplicate.

Define who investigates an unknown result, who may authorize a correction, how downstream work is paused and when to escalate. Exercise the runbook with failed cases. A retry counter without a business owner is not a recovery process.

## What a paid integration-feasibility assessment should establish

Buy a decision before buying an implementation. Start with one representative workflow and its success criteria, then test the most consequential uncertainty. Provide redacted examples, interface documentation, deployment details, relevant license terms and access to an authorized ERP contact. Share access through an approved process, not passwords in an email attachment.

| Deliverable | Evidence to request | Decision it supports |
| --- | --- | --- |
| Interface and support inventory | Version-specific documentation, required modules, approved access and named support boundaries. | Whether an existing supported route solves the problem. |
| Business data contract | Objects, field meaning, company boundaries, identifiers, direction and accepted final state. | Whether the chosen interface covers the real operation. |
| Representative technical spike | Redacted test inputs, observed results, environment details and unresolved constraints. | Whether the highest-risk assumption survives a limited demonstration. |
| Failure and reconciliation design | Partial success, unknown outcomes, duplicate prevention, correction ownership and recovery evidence. | Whether automation can run without silently damaging business state. |
| Operating and cost model | Implementation tasks, licenses, hosting or runners, monitoring, support, change testing and exit responsibilities. | Whether the business can maintain the solution after delivery. |
| Go, conditional go or no-go | Recorded conditions, excluded scope, alternative routes and a scoped next proposal. | Whether to configure, extend, automate partially, replace or stop. |

Label evidence honestly: vendor-documented, confirmed in the assessed environment, demonstrated only in a test, proposed, blocked or not tested. A prototype proves only what was observed under its stated conditions. It does not establish production reliability, upgrade compatibility or sustained peak throughput by itself.

The assessment cannot remove a vendor dependency that remains unresolved. Missing documentation or access may prevent a conclusive implementation estimate. A useful paid result can identify that blocker and the exact evidence needed to reconsider it, rather than promise a fixed build price on an assumption.

## Which failure cases should the buyer insist on testing?

Use the following as a proposed acceptance pack. Agree pass criteria and owners before a demonstration, then retain evidence for each relevant case. “Not applicable” requires a reason; “not tested” is not a pass.

| Test | Introduce this condition | Required observation |
| --- | --- | --- |
| 1. Scope and authority | Access another company or attempt an operation outside the integration role. | Access is denied and attributable; approved operations still work. |
| 2. Invalid business input | Unknown product, wrong currency, invalid unit or missing prerequisite. | No unintended posting; the rejected object and correction path are visible. |
| 3. Incomplete file | Interrupt upload or supply a truncated batch. | No premature processing; integrity or completeness checks prevent release. |
| 4. Duplicate delivery | Submit the same business operation again, including concurrently. | One accepted business effect, or a controlled stop when uniqueness cannot be guaranteed. |
| 5. Changed duplicate | Reuse a reference with different lines or amounts. | Explicit conflict or approved update handling, not silent replacement or duplication. |
| 6. Partial acceptance | Mix valid and invalid documents in one batch. | Confirmed, rejected and unknown objects are separated and reconciled. |
| 7. Lost acknowledgement | Break connectivity after submission may have committed. | Lookup or human investigation resolves the outcome before another submission. |
| 8. Revisions and ordering | Deliver an older update after a correction or cancellation. | Stale data cannot silently overwrite the authoritative state. |
| 9. Stale extraction position | Pause a delta feed beyond its supported recovery window. | The gap is detected and a controlled rebaseline is possible. |
| 10. Load and freshness | Run representative peak volume alongside ERP activity. | Agreed latency and workload limits hold; stale results are visible. |
| 11. Identity and session loss | Revoke credentials, expire a session or restart the runner. | The process stops safely and restarts without bypassing controls. |
| 12. UI or interface change | Change a field, dialog, selector or supported schema version. | A regression check detects incompatibility before unintended business writes. |
| 13. Integration-state recovery | Recover the integration store or replay its queue after an outage. | Existing ERP effects are reconciled before replay; evidence remains traceable. |
| 14. Operational handover | Give a failed case to the named operator without its original developer. | The operator can identify the affected object, pause work and follow the authorized runbook. |

## Three illustrative decisions, with different valid outcomes

### A distributor with a next-morning synchronization requirement

Assume its installed ERP has a supported order import, scheduled stock export and object-level results. The business accepts overnight latency. Start with those files and only the coordination needed for validation, secure transfer and exceptions. A full replacement or UI bot is not justified merely because REST would look more modern. First prove repeat-submission and partial-acceptance behavior.

### A manufacturer that needs reporting, not transaction entry

Assume an approved reporting view exposes the required entities and a DBA accepts the extraction workload. Use read-only extraction with a defined freshness indicator and reconciliation. Keep reservations and posting in the ERP. A later demand for immediate stock commitments is a scope change requiring a supported write path, not a small enhancement to the reporting feed.

### A screen-only workflow with limited volume

Assume the vendor allows the proposed access, the actual UI is automatable and an employee must approve the final document. Attended preparation may be sufficient. If the business instead demands unattended irreversible posting but no trustworthy outcome lookup or supported session model exists, do not proceed on the same design. Evaluate a vendor module, a controlled manual boundary or replacement.

These are invented decision scenarios, not project estimates. None establishes a universal cheapest approach, delivery duration or return on investment. Price the accepted workflow and ongoing responsibilities, including business exception work, against the real baseline.

## When replacement, deferral or a no-go is the responsible result

Stop the proposed implementation when it depends on unapproved access, unsupported transactional writes, bypassing security controls or repeating irreversible actions whose outcome cannot be determined. Also stop when required freshness exceeds the source's observable update capability, or no one accepts operational ownership.

Stopping one design does not imply replacing the entire ERP. Reduce the scope to read-only reporting, retain a supervised import, obtain an approved module or defer the workflow until support conditions change. Distinguish an inconvenient limitation from a business-critical impossibility.

For replacement, Microsoft's Strangler Fig guidance describes incremental migration but notes that the pattern may not fit systems whose requests cannot be intercepted or whose source cannot be changed. [Microsoft: phased-migration constraints](https://learn.microsoft.com/en-us/azure/architecture/patterns/strangler-fig) Do not assume that a closed desktop ERP can simply receive a transparent API facade and gradually disappear.

Prove separable business boundaries, decide which system is authoritative during coexistence and plan historical data access, reconciliation, cutover and support. A staged migration is a candidate architecture, not a reason to promise zero disruption. The old and new operating costs can coexist until a real dependency is retired.

## Scope a paid integration-feasibility assessment

Bring one workflow, the ERP/version, a redacted sample, available interface documentation, the required timing and examples of exceptions. Ask for an assessment scope that explicitly includes access approval, failure handling, supportability and a go/no-go recommendation. Agree its fee and deliverables separately from any implementation.

Wavect's [custom software development services](/services/software-development/) provide the commercial starting point for scoped integration work. The [MyMerch process-automation case study](/case-studies/mymerch/) offers adjacent delivery context, not proof of a no-API ERP implementation or compatibility with your system.

[Request a paid ERP integration-feasibility assessment](/contact/) before commissioning the full solution. The next proposal should follow the evidence, whether the answer is configuration, a small adapter, supervised automation or no implementation.

Independence and trademarks

Wavect publishes this page and is itself a provider, so we have a commercial interest in it. We are not affiliated with, endorsed by or partnered with the other companies named here, and all third-party company names, brands and trademarks are the property of their respective owners. Statements about other providers are taken from publicly available sources, primarily their own published pages, as of the review date shown on this page, and may have changed since. Please verify them directly before you decide. This page was written to the best of our knowledge and with the intent to remain objective. If you believe anything here is inaccurate or unfair, write to us and we will correct it: [office@wavect.io](mailto:office@wavect.io)

## ERP integration without an API: frequently asked questions

### Can you integrate a legacy ERP without an API?

Sometimes. First establish whether a supported import, export, integration module, SDK or approved query surface covers the specific operation. Reading information is not the same as creating, reserving or posting a business document. The assessment must verify the installed version, access rights and observable outcomes.

### Is CSV reliable enough for an ERP integration?

A file-based design can be appropriate when its timing fits the business and the importer provides usable outcomes. Specify schema and identifiers, prevent incomplete-file processing, distinguish partial acceptance, and prove safe repeat submission and reconciliation. Successful upload alone is not proof of business completion.

### Can we write directly to the ERP database?

Do not assume that technical access authorizes or supports transactional writes. Review the ERP vendor’s documented rules. An approved staging interface is different from arbitrary updates to application tables. Keep a read-only integration read-only unless a separately approved business-operation path is established.

### Can middleware create an API for an ERP that has none?

It can offer an API to another application while using an approved file, query or UI workflow behind it. That does not create missing ERP operations or transaction guarantees. The real interface, authorization and failure-recovery limits still determine what the new API can promise.

### When is RPA a reasonable choice?

For a bounded workflow whose actual client, identities, session model, volume and outcome verification have been tested. Attended document preparation can be sufficient. Unattended irreversible actions should not proceed on a design that cannot resolve an unknown result without risking a duplicate.

### Can an ERP without an API support real-time integration?

That depends on the approved access path and the required business meaning of real time. A frequently polled reporting copy does not reserve stock or guarantee an authoritative posting. Measure end-to-end freshness and prove the operation; otherwise reduce the requirement or choose another supported route.

### What does a paid integration-feasibility assessment deliver?

A version-specific interface inventory, business data contract, representative technical evidence, failure and reconciliation design, operating responsibilities and a go, conditional-go or no-go recommendation. Agree the assessment fee and scope separately. A prototype is not proof of production reliability or every upgrade path.

### When should we replace the ERP or stop the integration?

Stop the proposed design when it depends on unapproved access, unsupported writes, bypassed controls or unsafe retries of unknown outcomes. First consider a smaller scope, a vendor module or a supervised step. Replacement requires its own migration, data-authority, reconciliation and operational plan.

## Final thoughts

Choose the smallest supported path that satisfies the business operation and can be recovered safely. Files, read-only extraction and supervised UI work can all be appropriate. Buy evidence about access, outcomes and ownership before buying a connector, custom middleware or an ERP replacement.

## You may also like..

[**When the ERP has an API but imposes limits** A separate Odoo-specific discussion of available interfaces and architectural constraints.](/blog/odoo-erp-api-integration-limits-2026/) [**Custom software versus off-the-shelf** The wider procurement decision once the feasible integration boundary is understood.](/software-development-guide/custom-software-vs-off-the-shelf/)

Architecture and platforms

## Continue through this cluster

Framework, platform and system-design choices that affect delivery over the long term.

[Start with the cornerstone**Smart City Architecture Best Practices: MQTT, LoRaWAN, Kubernetes and Terraform**](/blog/smart-city-architecture-best-practices-2026/)

- [Shopify B2B Order Approvals: Native Features, Apps, or a Custom Buyer Portal?](/blog/shopify-b2b-order-approval-workflow/)
- [Shopify–ERP Returns and Refunds: When the Standard Connector Is Not Enough](/blog/shopify-erp-returns-refunds-integration/)
- [Managing Multiple Shopify Stores: Reporting App or Custom Operations Dashboard?](/blog/shopify-multi-store-operations-dashboard/)
- [Apple Container vs Docker: Compose, Networking and Migration](/blog/apple-container-vs-docker-compose-migration/)
- [Pake: Turn Websites into Desktop Apps Without Electron](/blog/pake-website-to-desktop-app/)

[**Back**](/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/team/kevin-riedl/)

[Kevin Riedl](/team/kevin-riedl/) https://linkedin.com/in/wsdt

16 min read · 29 Sep 2026 Last reviewed September 29, 2026

[**Next**](/blog/odoo-erp-api-integration-limits-2026/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/blog/legacy-erp-integration-without-api/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-09-29",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-09-29",
      "url": "https://wavect.io/blog/legacy-erp-integration-without-api/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "Assess the business operation before choosing the technology. Supported file exchange can fit batch work; approved read-only access can fit reporting. Middleware coordinates real interfaces but cannot invent safe ERP writes. UI automation needs a supported session model and verifiable outcomes. Stop unattended submission when an unknown result cannot be resolved safely. A paid feasibility assessment should document access, data meaning, representative tests, recovery, operating costs and a conditional go or no-go.",
  "articleBody": " Blog overview/Delivery and QA/Architecture and platforms Integrating an ERP Without an API: File Exchange, Database Access, RPA, or Replacement? TL;DR Assess the business operation before choosing the technology. Supported file exchange can fit batch work; approved read-only access can fit reporting. Middleware coordinates real interfaces but cannot invent safe ERP writes. UI automation needs a supported session model and verifiable outcomes. Stop unattended submission when an unknown result cannot be resolved safely. A paid feasibility assessment should document access, data meaning, representative tests, recovery, operating costs and a conditional go or no-go. You can integrate some legacy ERP workflows without a modern API. Start by checking supported file imports and exports, licensed integration modules and approved read-only data access. Use middleware to coordinate those interfaces. Consider UI automation only where the actual deployment and recovery process are viable; consider replacement when the required business outcome cannot be supported safely. The question is not whether somebody can move data once. It is whether the business can distinguish an accepted transaction from a rejected, duplicated or still-unknown one, and keep doing so after an ERP upgrade or a failed overnight run. This guide compares decision criteria for legacy ERP integration without an API, not connector prices or a generic ERP selection exercise. Product documentation was reviewed on 29 September 2026. Named systems illustrate specific interface boundaries, not a claim that those products lack APIs or that the same features exist in your installed version. Recommendations and scenarios below are our assessment framework, not results from a hands-on ERP benchmark. What does “ERP without an API” actually mean? Write down the product, edition, exact version, hosting arrangement and support provider before choosing a technology. Ask whether “no API” means no REST endpoint, no licensed access, no documentation, no access from the network, or no interface for the particular business operation. Those are different feasibility problems. Ask the vendor about a supported SDK, SOAP service, EDI interface, scheduled report, command-line importer or documented staging mechanism. A paid module might solve the problem more cleanly than screen automation. Verify its object coverage and recurring entitlement before treating a brochure or partner demonstration as proof. Separate read, write and post or approve. Reading stock for a dashboard does not reserve stock. Creating an order draft does not authorize its release. Exporting invoice lines does not prove that a payment was allocated. Describe the accepted business state, including who is allowed to cause it. For an ERP that already exposes an API, our Odoo API integration limits guide addresses a different problem: designing around an available API's constraints. Here, the first deliverable is an evidence-backed inventory of usable interfaces, not a new backend. File exchange, database access, middleware, RPA or replacement? Choose an access method per operation, not one technology for the entire company. A reasonable result might combine a read-only reporting feed with a supported order import and a manual exception queue. Proposed selection criteria, not a universal ranking of integration technologies ApproachA credible fit whenEvidence required before proceeding Supported file exchangeThe required objects have documented imports or exports, and batch timing fits the operation.Object-level results, field rules, repeat-submission behavior, scheduling and supported recovery. Approved read-only database accessThe goal is extraction or reporting through an approved data surface.Data meaning, permissions, consistency, query load, deletion detection and an accepted freshness limit. MiddlewareUsable interfaces exist but mapping, scheduling, state tracking or exception handling are missing.The actual endpoint or file contract on each side. Middleware does not create an ERP write capability by itself. UI automation / RPAA bounded workflow must use the interface and can run with approved identities and observable outcomes.A representative session test, stable targeting, business-state verification, capacity and human recovery. Replacement or staged modernizationEssential requirements have no supportable route, or sustaining the workaround is unacceptable.Data ownership, migration and cutover scope, business continuity, reconciliation and funded operation of the target. This is narrower than a general custom software versus off-the-shelf decision. An integration assessment can legitimately recommend keeping the ERP, buying an existing module or retaining one manual step. When supported file exchange is enough Do not dismiss CSV or XML because the transport looks old. Microsoft documents file mappings, transformations and validation hooks in Business Central's data exchange framework. Microsoft:",
  "articleSection": "Engineering",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "Microsoft: file mapping and validation",
      "url": "https://learn.microsoft.com/en-us/dynamics365/business-central/across-how-to-set-up-data-exchange-definitions"
    },
    {
      "@type": "WebPage",
      "name": "WinSCP: completed-upload handoff",
      "url": "https://winscp.net/eng/docs/resume"
    },
    {
      "@type": "WebPage",
      "name": "Oracle: NetSuite import outcomes",
      "url": "https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N350581.html"
    },
    {
      "@type": "WebPage",
      "name": "Oracle: the Connect read-only boundary",
      "url": "https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_3963845427.html"
    },
    {
      "@type": "WebPage",
      "name": "SAP: Recordset support boundaries",
      "url": "https://help.sap.com/doc/089315d8d0f8475a9fc84fb919b501a3/10.0/en-US/SDKHelp/SAPbobsCOM~Recordset.html"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: SQL read-consistency warnings",
      "url": "https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver17"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: recovering change-tracking consumers",
      "url": "https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/work-with-change-tracking-sql-server?view=sql-server-ver17"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: gateway connection model",
      "url": "https://learn.microsoft.com/en-us/data-integration/gateway/service-gateway-onprem"
    },
    {
      "@type": "WebPage",
      "name": "AWS: request identity and safe retries",
      "url": "https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/"
    },
    {
      "@type": "WebPage",
      "name": "UiPath: selector behavior",
      "url": "https://docs.uipath.com/activities/other/latest/ui-automation/about-selectors"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: unattended-session constraints",
      "url": "https://learn.microsoft.com/en-us/power-automate/desktop-flows/run-unattended-desktop-flows"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: virtual-desktop requirements",
      "url": "https://learn.microsoft.com/en-us/power-automate/desktop-flows/virtual-desktops"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: business-specific compensation",
      "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/compensating-transaction"
    },
    {
      "@type": "WebPage",
      "name": "Microsoft: phased-migration constraints",
      "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/strangler-fig"
    }
  ],
  "dateModified": "2026-09-29",
  "datePublished": "2026-09-29",
  "description": "Assess the business operation before choosing the technology. Supported file exchange can fit batch work; approved read-only access can fit reporting. Middleware coordinates real interfaces but cannot invent safe ERP writes. UI automation needs a supported session model and verifiable outcomes. Stop unattended submission when an unknown result cannot be resolved safely. A paid feasibility assessment should document access, data meaning, representative tests, recovery, operating costs and a conditional go or no-go.",
  "headline": "Integrating an ERP Without an API: File Exchange, Database Access, RPA, or Replacement?",
  "image": "https://wavect.io/img/blog/headers/header_legacy-erp-integration-without-api.svg",
  "inLanguage": "en",
  "keywords": "ERP integration, Legacy systems, Architecture",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/blog/legacy-erp-integration-without-api/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/blog/legacy-erp-integration-without-api/",
  "wordCount": 4169
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/",
      "name": "Home",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/blog/overview/",
      "name": "Blog overview",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/blog/topics/delivery-qa/",
      "name": "Delivery and QA",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/blog/clusters/architecture-platforms/",
      "name": "Architecture and platforms",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/blog/legacy-erp-integration-without-api/",
      "name": "ERP Integration Without an API: Options & Assessment",
      "position": 5
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sometimes. First establish whether a supported import, export, integration module, SDK or approved query surface covers the specific operation. Reading information is not the same as creating, reserving or posting a business document. The assessment must verify the installed version, access rights and observable outcomes."
      },
      "name": "Can you integrate a legacy ERP without an API?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A file-based design can be appropriate when its timing fits the business and the importer provides usable outcomes. Specify schema and identifiers, prevent incomplete-file processing, distinguish partial acceptance, and prove safe repeat submission and reconciliation. Successful upload alone is not proof of business completion."
      },
      "name": "Is CSV reliable enough for an ERP integration?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Do not assume that technical access authorizes or supports transactional writes. Review the ERP vendor’s documented rules. An approved staging interface is different from arbitrary updates to application tables. Keep a read-only integration read-only unless a separately approved business-operation path is established."
      },
      "name": "Can we write directly to the ERP database?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It can offer an API to another application while using an approved file, query or UI workflow behind it. That does not create missing ERP operations or transaction guarantees. The real interface, authorization and failure-recovery limits still determine what the new API can promise."
      },
      "name": "Can middleware create an API for an ERP that has none?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "For a bounded workflow whose actual client, identities, session model, volume and outcome verification have been tested. Attended document preparation can be sufficient. Unattended irreversible actions should not proceed on a design that cannot resolve an unknown result without risking a duplicate."
      },
      "name": "When is RPA a reasonable choice?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "That depends on the approved access path and the required business meaning of real time. A frequently polled reporting copy does not reserve stock or guarantee an authoritative posting. Measure end-to-end freshness and prove the operation; otherwise reduce the requirement or choose another supported route."
      },
      "name": "Can an ERP without an API support real-time integration?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A version-specific interface inventory, business data contract, representative technical evidence, failure and reconciliation design, operating responsibilities and a go, conditional-go or no-go recommendation. Agree the assessment fee and scope separately. A prototype is not proof of production reliability or every upgrade path."
      },
      "name": "What does a paid integration-feasibility assessment deliver?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Stop the proposed design when it depends on unapproved access, unsupported writes, bypassed controls or unsafe retries of unknown outcomes. First consider a smaller scope, a vendor module or a supervised step. Replacement requires its own migration, data-authority, reconciliation and operational plan."
      },
      "name": "When should we replace the ERP or stop the integration?"
    }
  ]
}
```
