Monday morning. Yousef points at the warehouse PC. “It has no API.” Karim still needs its stock counts in Beezr each night.
Integration without API access starts with finding a door you're allowed to use. Then agree who keeps it open. We'll check five routes, follow Sandline's file and test what happens when it goes wrong.
What does integration without API access mean?
An API is an agreed way for software to ask for data or actions. OpenAPI shows how an HTTP contract sets out inputs and replies.
No such route? Look for another supported door.
Keep reading apart from writing. Sandline needs stock counts. Creating warehouse movements would be a different project, with different risks.
Is it a desktop app or a web page? A PC can run either. Microsoft's docs make that split clear.
How do you integrate legacy systems? Check five routes
Ask the vendor first. Get a sample with the stock fields. “We could build that” isn't a route you can test today.
| Ask about | What to request |
|---|---|
| Supported routes | Export specification, reporting interface, approved read view, integration module or documented extension point |
Try the existing export. Sit with Yousef and check codes, bins, units and source time. Does quantity mean counted stock or stock for sale?
Manual upload is a valid first version if everyone knows who does it.
Agree a file drop. The source makes a file at a set time. A process at your end picks it up.
Name who owns access, transport and checks that the whole file arrived. Keep upload as a visible step until someone owns pickup and starting the run.
Read the database with approval. Get the owner's consent first. Keep writes out.
A field you can read may still mean the wrong thing.
| Database agreement | What to check |
|---|---|
| Account and view | Vendor-approved read account and documented reporting view |
| Permissions | PostgreSQL's privileges separates selecting from inserting, updating and deleting |
| Upkeep | Owner-approved query load, field meanings, upgrade tests and responsibility for schema changes |
Try the browser route. Can the service reach the page and sign in? Check before you build.
| Browser setup | What matters |
|---|---|
| Beezr Web Agent | CSS selectors find fields and buttons |
| Unattended sign-in | CAPTCHA, two-factor prompts and bot protection can block it |
If a person must answer a challenge, agree that step or choose another route. For desktop-only apps, assess files or a supported desktop tool.
Which route can you maintain?
These are our planning views, not measured scores. The work depends on what's there. A supported export can change the answer.
| Route | Setup effort | Reliability depends on | What breaks it | Who maintains it |
|---|---|---|---|---|
| Vendor-supported interface | Discovery first; implementation depends on what exists | A documented contract and upgrade support | Unsupported scope or a changed contract | Vendor plus Karim |
| Manual export/report and import | Lower when a usable report already exists | A repeatable human checklist and data checks | Missed upload, wrong report, wrong date | Yousef for export; Karim for mapping |
| Scheduled file drop | Moderate if export scheduling and transport exist | File completeness, freshness and receipt checks | Missing file, partial copy, changed headings | Source operator plus Karim |
| Approved database read | Moderate to higher, depending on vendor support | Stable view, permissions and acceptable workload | Schema change, revoked access, misunderstood fields | Database owner plus Karim |
| Browser automation | Moderate to higher, depending on page and sign-in behaviour | Reachable pages, working selectors and tested authentication | Page redesign, sign-in challenge, incomplete download | Karim, with vendor change notices |
A login alone proves little. Sandline needs a checked stock snapshot in Beezr, with a source time everyone understands.
Build the handoff around a stock snapshot
Karim finds a web app on the warehouse network. It has an Export to Excel button. A Web Agent will fetch the file each night.
If that fails, Yousef exports and uploads it by hand.
A snapshot is the reported quantity at a given time. It isn't an instruction to add that count to yesterday's stock.
These rows are test data, not real stock:
| Product code | Bin | Quantity | Unit | Source timestamp |
|---|---|---|---|---|
| NG-200 | A-01 | 40 | box | 2026-10-17 22:00, warehouse local time |
| HLM-01 | B-02 | 400 | piece | 2026-10-17 22:00, warehouse local time |
NG-200 is nitrile gloves by the box. HLM-01 is a safety helmet sold by the piece. Use source snapshot time, not upload time.
Keep source columns and unit codes in one place. Map BOX to box there and check product codes.
| Technical term | What it means here |
|---|---|
| Anti-corruption layer | A translation boundary keeps the old data model from spreading into the new one. It needs upkeep too. |
Sandline · example
The same stock file turns up again
Yousef uploads the test file: NG-200 has 40 boxes; HLM-01 has 400 pieces. Karim checks the mapping and source time before confirming.
Later, the same file returns. In the workflow version, Load data checks its source snapshot ID. A Decision uses Karim's tested rule to stop a repeat.
A later NG-200 count of 35 boxes is a new balance. Don't add 35 to 40. Show Layla which snapshot is current and reviewed; keep the old source date.
How the nightly download runs
- Open and sign in — reach the warehouse browser page.
- Choose the report — click Export with the selectors you chose.
- Wait for the file — a click alone doesn't prove download.
- Read the table — choose the sheet and heading settings for the list.
- Check the rows — use a Loop, mappings and Decisions. Send exceptions for approval before accepting the stock snapshot.
Agree who starts the run each night. Set up that trigger or outside schedule as part of the project.
How Beezr does it
The Web Agent job runs in its own queue service. The workflow waits, then gets a fresh copy of the record. Load any lists you still need again.
Have a CSV in a file field? The parser reads its typed columns into a named list. This differs from a Web Agent Excel download or an import preview.
Choose your path in Beezr's integration options.
What if the count can't be trusted?
Use these pass/fail tests:
| Test input or event | Expected behaviour to agree |
|---|---|
| Yesterday's file arrives today | Flag the source timestamp; don't present it as a fresh count. |
| A file contains an unknown SKU | Hold that row for mapping review; don't guess the product. |
| NG-200 uses pieces instead of boxes | Require an agreed conversion or correction before acceptance. |
| A file is empty or incomplete | Preserve the previous accepted snapshot and show the failed handoff. |
| The same batch is processed again | Recognise its identity; don't create a stock movement or duplicate accepted batch. |
| A browser selector or sign-in flow changes | Stop the failed route and use the agreed manual fallback. |
Store the source batch ID and review state on records. Use Decisions to split good rows from rows that need review. Add approval for a person to accept or reject.
Yousef owns what the numbers mean; Karim repairs the link. Hana should see a new snapshot before it feeds a finance decision.
Choose a route with an owner
- If a supported interface fits → test it first. Agree its contract and support.
- If an export is fresh enough → prove import first. Add scheduling after the file works.
- If scheduled export and transport exist → agree a file drop. Name the owner of collection and missing-file checks.
- If approved database access fits → use a documented read view. Agree load and schema changes.
- If only a browser route fits → test a Web Agent. Include sign-in, download and page changes.
- If no allowed route fits → keep a controlled manual handoff or change the need. Settle access before promising hands-off runs.
Myth / Reality
“If someone can click it, a robot can do it nightly.” Check browser access, reach and sign-in. A demo isn't an upkeep plan.
Our take
Our take. Start with the smallest useful read. A checked snapshot proves fields, units and ownership before you automate.
Key takeaways
- If you're technical: define snapshot ID, units and repeats first. Check browser versus desktop support.
- If you're not: ask to see a stale file and failed export.
- Every route needs an owner.
- Choose import, CSV parsing or Excel download on purpose. Agree scheduling and delivery too.
Build Sandline's stock-count handoff in Beezr
Start with a checked import, then have a Web Agent fetch exports.
- Create snapshot records — add code, bin, quantity, unit, source time and review state.
- Prove import — use CSV, XLSX or XLS. Map IDs and fix Must fix rows before confirming.
- Set up download — sign in, export Excel and read its table into a list.
- Check and review — use Loop, Load data and Decisions for product and snapshot checks. Add exception approval.
- Check failures — check run history, then correct or use manual import.
Questions readers ask
Can integration without API access always work?
Data on screen doesn't prove you can get it out. Check which route gives you the fields you need. Treat writes as their own task, with vendor support and checks.
How do you import legacy system data in Beezr?
Get the module's import template and map your file to it. Put Excel data on the first sheet, with headings at the top. Check new rows, updates and rows to review in Beezr's data tools.
Fix rows marked Must fix before you confirm. Watch the ID field too:
| ID choice | Result |
|---|---|
| Existing Beezr record ID | Updates that record |
| Empty ID | Creates a new record, including on repeat import |
| Warehouse SKU | Not a Beezr record ID; don't expect a product-code match |
Choose new snapshots or updates to known records. Test that choice.
What should a CSV file agreement cover?
Agree the file rules, then test a name with punctuation.
| CSV detail | Agreement |
|---|---|
| Format | Headings, types, encoding and quoting |
| Text | RFC 4180 covers commas and line breaks in fields; it notes common US-ASCII usage. Agree encoding for Arabic and accented names. |
RPA vs API: what's the difference?
RPA is software that uses an app's screens like a person. An API uses the app's defined software interface. Prefer a supported API that fits.
| Tool scope | What to check |
|---|---|
| Microsoft desktop flows | Legacy and desktop applications |
| Microsoft UI elements | Distinct desktop and web elements |
| Beezr Web Agents | Browser interaction; assess desktop automation as a separate capability |
The screen is just the start. Ask who will keep this route working. Then show that person a failed run, as well as a good one.
Sandline Supplies is a fictional example company.
Sources
- Common Format and MIME Type for Comma-Separated Values (CSV) Files, RFC 4180 · RFC Editor · 2005-10
- Privileges, PostgreSQL 18 · PostgreSQL Global Development Group · Accessed 2026-10-17
- Automate using UI elements · Microsoft · Updated 2026-05-14
- Introduction to desktop flows · Microsoft · Updated 2026-08-23
- OpenAPI Specification v3.1.1 · OpenAPI Initiative · 2024-10-24
- Anti-Corruption Layer pattern · Microsoft · Updated 2026-05-28