Featured Answer:
MRI Software is a property management platform. Browser automation provides reconciliations, payments, and report downloads when API access is limited or staff use the MRI portal.
Table of Contents
Introduction
MRI Software is a property management and real estate technology platform. While MRI offers APIs and integrations, browser automation offers a practical way to run reconciliations, process payments, and download reports when API access is limited or when staff work primarily in the MRI web portal.
Why Use Browser Automation for MRI Software?
- Limited API Access: MRI API and bulk export options may be restricted for some roles or products
- Reconciliations: Run bank and GL reconciliations, match transactions, and export reconciliation reports from the UI
- Payments: Process payment runs, approve disbursements, and sync payment status from the accounting or payables view
- Report Downloads: Download financial, occupancy, and operational reports from the reporting or export UI
- UI-Only Flows: Many reconciliation and payment workflows are run from the web interface
- Cross-Property and Portfolio: Operate across properties and entities in one session
- Audit: Export transaction and activity data for compliance and reconciliation
Setting Up MRI Software Automation
Here's how to automate reconciliations, payments, and report downloads in MRI Software using browser automation:
import { chromium } from 'playwright';
const response = await fetch("https://api.anchorbrowser.io/api/sessions", {
method: "POST",
headers: {
"anchor-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
'headless': false,
'proxy': { 'type': 'residential', 'country': 'US' }
}),
});
const { id } = await response.json();
const connectionString = `wss://connect.anchorbrowser.io?apiKey=YOUR_API_KEY&sessionId=${id}`;
const browser = await chromium.connectOverCDP(connectionString);
const context = browser.contexts()[0];
const ai = context.serviceWorkers()[0];
const page = context.pages()[0];
await page.goto("https://app.mrisoftware.com");
await ai.evaluate(JSON.stringify({
prompt: 'Log in to MRI Software using the provided credentials. Complete SSO or MFA if required and wait for the portal to load.'
}));
Use Case 1: Reconciliations
Run bank and GL reconciliations and export reconciliation reports:
const runReconciliations = async (page, ai, criteria) => {
await ai.evaluate(JSON.stringify({
prompt: 'Navigate to Accounting or Reconciliations. Open bank reconciliation or GL reconciliation.'
}));
await page.waitForLoadState('networkidle');
await ai.evaluate(JSON.stringify({
prompt: criteria.accountId
? `Set account and period: ${criteria.accountId}, ${criteria.period || 'current'}. Run or refresh reconciliation.`
: 'Set period and scope. Open reconciliation view.'
}));
await page.waitForLoadState('networkidle');
await ai.evaluate(JSON.stringify({
prompt: 'Export reconciliation report (PDF or Excel). Wait for download. Do not expose account or transaction details in logs.'
}));
const download = await page.waitForEvent('download', { timeout: 30000 }).catch(() => null);
return { path: download ? await download.path() : null, completedAt: new Date().toISOString() };
};
Use Case 2: Payments
Process payment runs and sync payment status from the MRI UI:
const runPayments = async (page, ai, criteria) => {
await ai.evaluate(JSON.stringify({
prompt: 'Navigate to Payables or Payments. Open payment run, disbursements, or payment list.'
}));
await page.waitForLoadState('networkidle');
await ai.evaluate(JSON.stringify({
prompt: criteria.action === 'export'
? 'Export payment list or run report. Wait for download. Do not log vendor or bank details.'
: criteria.action === 'approve'
? 'Approve payment run or selected disbursements as specified. Confirm. Do not expose bank or vendor PII.'
: 'List payment runs: date, status, total. Return as JSON. No account or vendor PII.'
}));
await page.waitForLoadState('networkidle');
const result = await ai.evaluate(JSON.stringify({
prompt: 'Return summary: export path or approval result. As JSON. No credentials or PII.'
}));
return { result: typeof result === 'string' ? JSON.parse(result) : result, completedAt: new Date().toISOString() };
};
Use Case 3: Report Downloads
Download financial, occupancy, and operational reports from the reporting UI:
const runReportDownloads = async (page, ai, criteria) => {
await ai.evaluate(JSON.stringify({
prompt: 'Navigate to Reports or Export. Open the report library or report runner.'
}));
await page.waitForLoadState('networkidle');
await ai.evaluate(JSON.stringify({
prompt: criteria.reportName
? `Run report: ${criteria.reportName}. Set period ${criteria.period || 'as default'}. Export (PDF/Excel/CSV). Wait for download.`
: 'List available reports. Run and export the specified report. Wait for download. Do not log sensitive data.'
}));
const download = await page.waitForEvent('download', { timeout: 30000 }).catch(() => null);
return { path: download ? await download.path() : null, completedAt: new Date().toISOString() };
};
Exporting Transaction and Activity Data
Export transaction and activity data for audit:
const exportMRIActivity = async (page, ai, scope) => {
await ai.evaluate(JSON.stringify({
prompt: scope === 'transactions'
? 'Navigate to Accounting or Transactions. Set date range. Export transaction list or report. Wait for download.'
: 'Navigate to Reports or Activity. Export activity or audit data as specified. Do not include PII in logs.'
}));
const download = await page.waitForEvent('download', { timeout: 20000 }).catch(() => null);
return download ? await download.path() : null;
};
Best Practices for MRI Software Automation
- Security: Use least-privilege roles and SSO; never log credentials, bank details, or vendor PII; respect data governance
- Reconciliations: Align automation with accounting close and reconciliation schedules; restrict export access
- Payments: Use automation for reporting and status sync; follow approval workflows; do not expose bank or vendor details in logs
- Report Downloads: Download only reports you are authorized to access; do not log sensitive report contents
- Rate Limits: Add delays between actions to avoid MRI UI throttling
- Error Handling: Retry on session timeout; handle SSO and MFA gracefully
- Compliance: Align automation with your org's property management and financial policies
Handling Authentication
MRI Software supports SSO and MFA for portal users:
const handleMRIAuth = async (page, ai, credentials) => {
await page.goto("https://app.mrisoftware.com");
await ai.evaluate(JSON.stringify({
prompt: 'Sign in with the provided credentials. If SSO is required, complete org SSO.'
}));
await ai.evaluate(JSON.stringify({
prompt: 'If MFA is required, complete verification. Wait for MRI portal to load.'
}));
await page.waitForLoadState('networkidle');
};
Resources
- Anchor Browser Documentation - API reference and guides
- Anchor Browser Playground - Try browser automation in your browser
Conclusion
Browser automation provides a flexible alternative to API and manual workflows for MRI Software property management. By using intelligent browser agents, you can automate reconciliations, payment processing and status sync, and report downloads directly from the MRI web portal. Whether you need to run bank and GL reconciliations, process or approve payment runs, or download financial and operational reports, browser automation enables efficient MRI operations when API access is limited or when staff work in the UI.
Start automating your MRI Software reconciliations, payments, and report downloads today.