Konstantin Kalinin
Konstantin Kalinin
Head of Content
September 10, 2026

A prospect asks whether your product supports AdvancedMD, and someone on the call answers with a quarter. Date first, documentation second. That order is what makes AdvancedMD integration expensive, because you commit before you know which operations AdvancedMD documents.

Redox lists AdvancedMD connectivity, and Redox’s own pricing page, accessed September 3, 2026, starts at $15,000 per year for Sandbox and $35,000 for Core. Neither figure proves an AdvancedMD practice-management write.

Ben Orwoll, MD, told an ONC writeback workshop in 2021 that without writeback, most applications are more like reference materials. His subject there was read-only access in general rather than AdvancedMD.

AdvancedMD’s terms of service, revised September 2025, permit Connect only with external systems registered in that client’s Order Form. So access arrives one client at a time, whatever your developer certification says.

Run it the other way. Inventory the reads, writes, and bulk pulls your product needs, then verify each one against current documentation before anyone estimates the build, the same first move as how to integrate with Epic EHR. Where the documentation settles nothing, we’ll say so and name the proof that would settle it.

 

How do you connect a health app to AdvancedMD?

Start from your required data flows, then verify each read and write against current AdvancedMD documentation before anyone estimates the build. Every documented path is a read or an extract: FHIR Single, FHIR Bulk, Application Access, ODBC. Every write runs through Connect, whose per-domain methods sit behind an agreement gate, and the schedule turns on getting that gate opened.

 

Key takeaways:

  1. Four of the five AdvancedMD surfaces are read-only, so the write is a procurement item. Three API products and a database path return data and nothing else. The fifth claims create and update and keeps its per-domain methods behind an agreement, so scope the reads now and put the writes on the contract calendar.
  2. Verification happens one operation at a time. A capability claim on a vendor page covers a whole program, while your roadmap needs a method contract for a specific job. Two workflows in the same product can land in different evidence states.
  3. The aggregator question is settled by the write path. Redox, Rhapsody, Health Gorilla and Kno2 publish connector listings or general network material and no AdvancedMD operation matrix, so the path belongs to whichever vendor will name your missing operation in a contract.

 

Table of contents

  1. AdvancedMD API access spans four API products plus read-only ODBC
  2. Map each health app job to a verified AdvancedMD API path
  3. Production access and authentication belong on the delivery plan
  4. Reliability and HIPAA controls start at the data boundary
  5. Choose direct AdvancedMD access or an aggregator by the write path
  6. Plan your AdvancedMD API integration with Topflight Apps

 

AdvancedMD API access spans four API products plus read-only ODBC

AdvancedMD access spans 4 documented API products plus a read-only database path. The 5 differ on format, on domain, on which methods are documented, and on whether that documentation is open to you at all, so choosing an AdvancedMD API is an operation-level call you make once per data flow, one row at a time.

Where the platform draws the line between an API and a service

AdvancedMD’s own developer materials group practice management and electronic health record access under one heading, Connect or Partner APIs. HIE, Orders and Results, and file or data export sit outside that heading, presented as services rather than as documented API products. And if you carried File Chart XML in from older integration notes, park it. No current public source we found substantiates it as a surface name, so it lands on neither side of that split.

You’re choosing an interface per operation, so the only rows worth comparing are the interfaces AdvancedMD documents. That’s what the matrix below holds: 4 API products and ODBC, side by side on the 5 axes that decide whether a given operation can run there. The services stay outside it. Where a job’s best path turns out to be an export, the job-to-path map picks it up.

One row per surface, and the cells the documentation never fills

Surface Format Domain Documented methods Authentication evidence Documentation gate
Connect or Partner APIs XML-RPC and REST Practice management CRUD, plus scheduling, payment and revenue cycle use cases, claimed at program level Per-domain methods not published Issued appname at program level; runtime authentication not published Agreement-gated developer documentation
FHIR Single API FHIR R4 Regulatory clinical read set: USCDI v3 on US Core 6.1.0, compliant with 45 CFR 170.315(g)(10) Read and search, including POST search SMART on FHIR authorization code plus refresh token Published method and authentication documentation
FHIR Bulk API Not published Group-scale export Asynchronous preauthorized group export: 202 on job start, poll for status, 200 when files are ready Private-key-JWT client credentials Published method and authentication documentation
Application Access APIs REST Clinical data outside FHIR GET-only API key plus session token Published method and authentication documentation
ODBC SQL over a custom Windows driver with a data dictionary Demographics, appointments, financial transactions, most EHR clinical data Read-only full extracts then delta loads; no method-level documentation beyond that Not published Published product documentation only; no method or authentication documentation

Every cell in that table comes from AdvancedMD’s own developer and FHIR documentation, accessed September 3, 2026.

AdvancedMD v25 is an Active certified Health IT Module on the ASTP/ONC Certified Health IT Product List, certified by Drummond Group on December 15, 2025, and 170.315(g)(10) Standardized API for Patient and Population Services is one of the criteria it holds. Certification attaches to the CEHRT module, and of the 5 surfaces above, FHIR Single is the one that API criterion covers, which leaves the practice-management API a builder uses for writes outside that criterion.

How much of that matters to you depends on which side of the line your product sits. A product whose AdvancedMD requirement is entirely read clears the whole table on the documented surfaces alone, and companion app development is the clearest case of that shape. The unpublished cells never become your problem.

Diagram of AdvancedMD API integration surfaces, showing read-only FHIR, Application Access, and ODBC paths alongside the gated two-way Connect path.

The 5 documented AdvancedMD surfaces, with the only two-way path sitting behind agreement-gated documentation.

Which leaves the mismatch this table exists to prevent. A roadmap that assumes a required write can run over FHIR Single, FHIR Bulk, Application Access, or ODBC is planning against a read-only API, whatever the surface calls itself, and an HL7 FHIR R4 read set and a RESTful API that answers GET give the same answer to a write question.

Route that write to Connect instead, and treat its per-domain methods as evidence you have to obtain before anyone commits to a delivery date. The cost of getting this wrong lands late, when every read on your list works and the one write on it has nowhere documented to go. That’s the boundary this table settles: 4 of the 5 surfaces will never carry your write, and the fifth won’t tell you what it carries until you’re inside the agreement.

Map each health app job to a verified AdvancedMD API path

Every job on your list runs on one documented AdvancedMD path, and an AdvancedMD EHR integration plan starts by naming which. Every documented path below is a read or an extract, and every write a roadmap needs is claimed at program level with no public operation contract.

Build the list before you look anything up. For each job, write down the operation verb, the data domain, the direction, the latency you need, and the volume you expect, whether the work is telemedicine, patient engagement, remote monitoring, or billing. Then run each line against the two tables below.

Direction is the axis that decides the most. Ben Orwoll, MD, an OHSU pediatric critical care physician and informatician, told an ONC writeback workshop in 2021 that without writeback, most applications are more like reference materials. He was talking about read-only API access as a category, so the line is a ceiling on read-only integrations generally. Apply it to a roadmap that has to reschedule a visit, submit a signed note, or post a payment, and read-only access means those features wait on a contract negotiation instead of a sprint.

AdvancedMD integration decision flow routing one product job to a documented read interface or to a gated Connect write verification step.

Every documented path lands on a read. Every write ends at the same gated verification step.

Reads and extracts you can scope from public documentation

The first table is the data mapping: every job on the left, the interface that serves it in the middle, and on the right the FHIR resource, table set, or output the documented path actually hands back. One naming point before you read it.

HL7 defines an Appointment as a booked event that may lead to one or more Encounters, and an Encounter as the care interaction itself, so the two are separate resources and the difference decides what the appointments row can return.

Job to support Documented interface What the path returns
Patient demographics (patient intake) FHIR Patient and the Application Access demographics route Patient
Allergies FHIR Single API AllergyIntolerance
Problems and health concerns FHIR Single API Condition
Vitals and results (remote patient monitoring app development) FHIR Single API Observation
Reports and clinical notes FHIR Single API DiagnosticReport
Documents FHIR Single API DocumentReference
Medications (clinical medication adherence platform) FHIR Single API MedicationRequest or MedicationDispense
Appointments and encounters (telehealth session records) ODBC appointment extracts; FHIR R4 CapabilityStatement Encounter, and not Appointment
Charge capture, payments and adjustments (billing reconciliation, EHR in medical billing) ODBC and export ODBC financial tables and the export files that hold them
Population-scale reporting FHIR Bulk API Asynchronous Group export
Reporting from a database extract ODBC Read-only full or delta extraction
Reporting from packaged export files Packaged file export SQL, Access, C-CDA, PDF, CSV and native files

Every cell above comes from AdvancedMD’s own FHIR and interoperability documentation, accessed September 3, 2026.

Writes that stay unscoped until gated Connect documentation confirms them

All 4 write rows below share one requirement, so it sits here rather than four times in the table: each has to be verified against gated Connect documentation before it enters scope. What AdvancedMD publishes about the AdvancedMD PM API is a capability claim, and that’s well short of an operation contract.

Write job What AdvancedMD states publicly The limit the public record places on it
Patient demographics write Connect can add patients No create or update fields, no method contract, no authentication detail published
Clinical notes and other EHR writes (ambient AI scribe app development) Connect’s broader EHR CRUD claim AdvancedMD’s own FHIR documentation rules writeback out of the regulatory FHIR APIs, the Application Access clinical routes are GET-only, and the CRUD claim carries no public operation contract
Appointment scheduling write Connect described as supporting scheduling No public contract establishes appointment creation or rescheduling
Charge and payment write Connect can create charges and payments, stated at a high level No public method contract establishes claim submission or real-time eligibility verification

Every cell above comes from the same AdvancedMD FHIR and interoperability documentation, accessed September 3, 2026.

E-prescribing is the sharpest version of the pattern: AdvancedMD’s EHR is ONC/ASTP-certified to 170.315(b)(3) electronic prescribing with Surescripts named as the relied-upon software, per its 2024 Real World Test results dated February 27, 2025, and no prescribing endpoint is publicly documented.

Go back to your own list and mark every line with one of two states: a documented read or extract path you can scope today, or a write claimed at program level whose operation contract has to come out of gated Connect documentation first. Next to each line in the second state, write the one proof that would move it, the specific method or field set you need in hand. That marked-up list is what a delivery date gets built on.

Production access and authentication belong on the delivery plan

AdvancedMD grants Connect and the regulatory FHIR APIs under different agreements and authorizes them through different actors. So your delivery plan carries one gate list per program you actually need, and an AdvancedMD FHIR API build stops being the same project as a Connect build on day one.

Connect and the FHIR APIs are granted separately

Three axes separate the programs: which agreement gets signed before a build starts, who approves the connection at runtime, and what the caller is holding at call time, meaning the grant that runs and the scopes and access token it returns. Token-based authentication is a per-program answer here, and OAuth 2.0 alone tells you nothing about which program you’re in.

Program Access contract before build starts Runtime authorization What the caller holds at call time
Connect Client agreement, API Developer Agreement, or NDA with user approval; Certified API Developer Agreement for production Client connection setup No grant established by public evidence
FHIR Single Developer and app registration App approval plus interactive patient or provider SMART authorization Authorization code plus refresh token
FHIR Bulk Developer and app registration Preauthorization plus a private-key-JWT client-credentials flow supplying provider credentials and an office key Private-key JWT client credentials, provider credentials, office key

Read the first column and the split shows up. Connect documentation may open after a client agreement, an API Developer Agreement, or an NDA with user approval, and production use requires the Certified API Developer Agreement. Regulatory FHIR runs its own developer and app registration path instead. AdvancedMD draws its published contract line between Connect and regulatory FHIR and publishes no separate contract stage for FHIR Bulk against FHIR Single, so those two cells read alike on purpose.

The middle column is what costs you calendar time, and it costs each program differently. An interactive Single app needs a person present to authorize, a patient or a provider completing the SMART on FHIR authorization step, which makes your identity verification story and your first live call the same conversation.

A Bulk pipeline authorizes as a preauthorized client, so it runs unattended once the key is in place. A Connect connection waits on the client to set it up, which puts a step you don’t control between your sandbox work and your first production call.

At call time, AdvancedMD’s FHIR launch and authorization documentation, accessed September 3, 2026, gives FHIR Single an authorization code flow with a refresh token, and FHIR Bulk a private-key JWT client credentials flow carrying provider credentials and an office key. For Connect, public evidence establishes no grant at all.

The InterOps demonstration is the gate your schedule turns on

AdvancedMD documents a gated production sequence for Connect, and the InterOps demonstration is the point your schedule turns on, because nothing reaches production until it passes. Plan it as a gate with a date and an owner of its own. What comes out the other side is a set of live API credentials carrying a unique appname, and public sources define that identifier no further. Everything before it, including the sandbox environment your team builds against, is preparation for one review by the InterOps team.

Timeline diagram of the AdvancedMD API integration onboarding path, from Certified API Developer Agreement through sandbox build and testing to the InterOps demonstration gate and live production credentials.

The AdvancedMD Connect path to production: four documented stages, one hard gate at the InterOps demonstration, and a registration step that repeats for every client.

AdvancedMD’s client terms permit Connect only with external systems registered in that client’s applicable Order Form, so certifying as a developer opens nothing across AdvancedMD practices by itself, and every new client carries its own registration step.

The fee and the total duration are inputs you are still waiting on

AdvancedMD keeps Connect licensing, support, and sandbox charges in private sales or order-form terms with no dollar schedule published, while its regulatory FHIR access is free today under terms reserving the right to charge later, per AdvancedMD’s API connection request material accessed September 3, 2026.

The published timings are component-level only. Connect portal approval takes several business days, sandbox creation normally takes up to 24 hours once InterOps receives the internal request, and FHIR app approval may take a few days. AdvancedMD publishes no end-to-end duration.

So your engineering estimate covers the gates above and stops there. The Connect fee and the total elapsed time are inputs you’re still waiting on, and a plan that carries them as open inputs holds up in front of procurement better than one that guesses at them. All of it sits on top of your own hipaa compliant app development work rather than replacing any of it.

Reliability and HIPAA controls start at the data boundary

Design synchronization per data flow and PHI controls per boundary, both from what the surface you chose documents. The runtime evidence is surface-specific, so when you integrate with AdvancedMD you inherit a separate data synchronization contract per surface you read from.

Runtime behavior is documented surface by surface

What AdvancedMD documents, surface by surface:

  • FHIR Single API. Read and search are documented, and the live CapabilityStatement carries no Subscription resource, so no change-notification mechanism is published.
  • FHIR Bulk API. An asynchronous job with a documented response sequence, below.
  • Application Access APIs. A legacy Application Access endpoint documents HTTP 429 with guidance to retry in about 1 minute, and AdvancedMD’s FHIR terms reserve temporary throttling without preset restrictions. No numeric quota, pagination contract, or platform-wide retry policy is published.
  • Connect. Event behavior sits behind the agreement gate, so the public record settles nothing about it.

So no webhook claim and no universal polling claim holds here, and no platform-wide real-time transactional contract holds either.

The Bulk sequence is the one job AdvancedMD walks through. Group/{groupId}/$export answers 202 with group and job identifiers, keeps answering 202 while the job runs, and allows cancellation only inside that window. Then it exposes a batch number for per-resource retrieval, which returns 200. That buys you job-state tracking, a retrieval step your integrator owns, and tests written against what this API actually returns, because its job and batch endpoints differ from the standard Bulk example.

Everything AdvancedMD publishes about runtime behavior attaches to one surface, so a product reading from two surfaces inherits two contracts and has no platform-wide behavior to design against.

Write safety comes from your own code

RFC 9110 makes GET, PUT and DELETE idempotent, and tells clients not to retry a non-idempotent POST automatically unless they know it’s idempotent or can determine the first attempt never applied. A create that may already have landed is exactly that case.

Connect’s per-domain contracts sit behind the same agreement gate, so whether a create accepts a client-supplied idempotency key, or dedupes on an external identifier, is a question you answer from the gated documentation or get in writing during onboarding. Until it is, design for at-least-once delivery and keep the retry logic where you control it.

A duplicate charge or a duplicate appointment is a call from the practice, so Topflight Apps treats write error handling as product surface and builds in five controls:

  • backoff sized to the 429 rate limiting the legacy Application Access endpoint publishes, which does not reach Connect
  • application-level deduplication keyed on something the caller controls
  • an outcome lookup before any replay
  • a scheduled reconciliation pass comparing what the app believes it wrote against what reads return
  • observability recording which write reached which surface

The BAA chain follows where PHI actually lands

Two axes run through this. Which party is authorized at runtime to make a given call, and which party is a business associate for the protected health information it moves. Map both onto your flow list: who holds the credential, who stores the response, who the patient authorized.

AdvancedMD’s terms of service, revised September 2025, carry a business associate agreement for the PHI AdvancedMD handles for its client. That BAA doesn’t reach an independent app vendor on its own.

An app vendor handling PHI for a practice is ordinarily that practice’s business associate and needs its own BAA with that practice, per HHS OCR guidance reviewed July 30, 2026. Access a patient directs for themselves may not create that relationship at all, which is why HIPAA compliant software development starts with who directed it. HIPAA doesn’t require SOC 2, per HHS OCR guidance reviewed July 26, 2013, and AdvancedMD’s onboarding material sets no SOC 2 condition either, which leaves SOC 2 healthcare startups buyer-driven.

Diagram of the HIPAA business associate chain in an AdvancedMD integration, showing the practice, AdvancedMD, and an app vendor with separate BAA relationships.

AdvancedMD’s BAA covers what AdvancedMD handles for its client, which leaves the practice-to-app-vendor agreement as the one nobody signs for you.

Turn these controls into release gates

AdvancedMD’s terms of service let it suspend Connect over confidentiality, integrity, availability, or performance concerns. Its BAA promises reporting of successful security incidents within 5 business days and breach notice within 60 calendar days, and its terms require externally created signed notes to carry the patient, the provider ID, and the signature date and time. Those clocks bind AdvancedMD to its client under AdvancedMD’s own BAA, and leave the app vendor’s obligations untouched.

Gates a team can test before production traffic:

  • a connection kill switch with a visible suspended or degraded state
  • signed-note writes that preserve the required lineage fields
  • throttle handling proved against the legacy Application Access endpoint’s 429 behavior rather than a Connect throttling contract
  • a replayed write that still produces one record
  • audit logging and an escalation route that can feed AdvancedMD’s contractual reporting clocks

Each gate is a test someone runs, with a named owner, before the first production call.

Choose direct AdvancedMD access or an aggregator by the write path

Two things settle an AdvancedMD practice management integration. Which of your required operations a vendor will name in a contract, and how many EHRs past AdvancedMD your roadmap has to reach.

5 criteria, and the first 2 decide most cases

Score both paths on 5 things before any vendor name enters the conversation:

  • the exact operations on your flow map
  • how many EHRs beyond AdvancedMD you have to reach
  • time to your first paying customer
  • ongoing cost at your own volume
  • how much of the connection you hold yourself

The alternative to building direct is an integration engine or middleware vendor who owns the connection for you. Operation coverage and target breadth settle most cases; the other 3 break ties.

Redox, Rhapsody, Health Gorilla and Kno2 publish no AdvancedMD operation matrix

None of those 4 publishes an AdvancedMD-specific operation matrix. So a practice-management write stays unproven until a vendor names that operation in your contract, which makes the contract the artifact your roadmap actually rests on.

Redox’s generic APIs cover writeback and normalized models including Scheduling, and Redox itself says many EHRs do not support FHIR writes and that fields stay connection-specific. That comes from Redox’s own data-model documentation, not the pricing page the table below cites. So code that runs against one Redox connection proves that connection works, and proves nothing about whether an AdvancedMD practice-management operation exists.

From the other direction, AdvancedMD’s own published integration evidence is partner-specific: its R&D HealthTech marketplace listing, accessed September 3, 2026, documents charge-file upload into AdvancedMD.

What each path publishes, and what you still have to ask for

The columns read left to right as a procurement checklist. The last one is the question that goes into that vendor’s own call.

Path or vendor Published AdvancedMD evidence Commercial model or public amount Contracting dependency Confirmation required
Direct AdvancedMD access AdvancedMD’s own developer and FHIR documentation No public amount; terms sit inside AdvancedMD’s program agreements That program agreement, plus a registration step per client Does gated Connect documentation cover the per-domain methods on your write list?
Redox A listing naming AdvancedMD, alongside Redox’s own warning that workflow support varies (Redox) Redox’s pricing page, accessed September 3, 2026: $15,000 per year Sandbox, $35,000 per year Core, consumption and services billed separately; Redox platform tiers rather than a quoted price for an AdvancedMD connection Tier plus usage What do consumption and services add on top of the tier at your volume?
Rhapsody Rhapsody’s 2023 integration list names AdvancedMD; Lyniate is Rhapsody’s former name, so this row covers it (HIT Consultant, April 2023) Priced against the standard integration library, with an uplift possible outside it Whether AdvancedMD sits inside that library Current library status, and the uplift if it sits outside?
Health Gorilla Nothing AdvancedMD-specific; general clinical-network and API capability documentation, accessed September 3, 2026 Case-specific and transaction-based The quote hangs on your transaction profile Which events count as billable transactions, at what rate?
Kno2 Nothing AdvancedMD-specific; broad connectivity claims in Kno2’s 2026 frequently asked questions Flat-rate subscription quote for most partners, no public amount The amount is set per partner What is the flat-rate figure?

Let the unconfirmed writes on your map pick the path

Run the rule against your own map in 2 steps. When every operation on it is already documented on the direct path, breadth and speed decide which path to price, and any aggregator still in the running has to name those same operations on its AdvancedMD connection. When a required operation is still unconfirmed, the path belongs to whichever vendor will name it in a contract, and the answer can come out differently for 2 workflows in the same product: a chronic disease management app can land its read path with one vendor and its write path with another.

Decision diagram routing one required operation to the direct AdvancedMD path or to an aggregator, based on whether the operation is already documented.

Run the rule per operation rather than per product, and the read path and the write path are allowed to end up with different vendors.

Micky Tripathi, then National Coordinator for Health IT, told Medical Economics in July 2021 that interoperability maturity depends on what the user is doing and which health system is involved. That’s the general case for running this rule workflow by workflow.

The job-to-path map you built earlier is the input to this decision.

Plan your AdvancedMD API integration with Topflight Apps

Bring us the flow list and we’ll turn it into three things you can put in front of a board: a surface map tying every required operation to a documented path or an explicit evidence state, the credential and onboarding gates each access program adds to your schedule, and a direct-versus-aggregator call driven by the write paths that actually decide it.

Those three settle one question. Either your roadmap can carry a committed AdvancedMD delivery date now, or specific gated proofs have to land before anyone commits to one. You leave knowing which of the two you’re in, and what it would take to move.

We’ve done this work on other platforms. Topflight Apps’ own record covers Epic FHIR and app-store work, plus the GaleAI build on Epic, Athena, SMART on FHIR, and Mirth, and the practice spans workflow validation, sandbox, QA, go-live, and marketplace support on EHR integration builds. The same team tracks how AI will change EHR platforms, which is the direction this work is heading.

So bring two things. The flow list you need AdvancedMD to carry, with each flow’s latency and volume ceilings and whether it touches PHI. And where your AdvancedMD access stands today, including whether an AdvancedMD Marketplace listing is where you intend that access to end up. We run the verification against the list you bring, and that list is what turns an AdvancedMD API integration from an estimate into a plan.

 

Frequently Asked Questions

 

How do I get access to the AdvancedMD API?

Two paths, granted separately: Connect via AdvancedMD’s developer agreement chain, regulatory FHIR via developer and app registration.

Is the AdvancedMD API free to use?

Regulatory FHIR is free today, under terms reserving the right to charge later. Connect licensing sits in private sales terms.

What is the difference between the AdvancedMD PM API, EHR API, and FHIR API?

PM and EHR are capability domains inside Connect, which claims create and update. FHIR and Application Access publish their authentication; Connect’s runtime authentication and ODBC’s are not published.

Can I write appointments or charges through the AdvancedMD FHIR API?

FHIR Single and FHIR Bulk are documented read paths, so neither carries an appointment or charge write; that question moves to the gated Connect documentation the job-to-path table points at.

Does an AdvancedMD integration require a BAA?

Usually one between the practice and the app vendor. AdvancedMD’s own agreement covers only what AdvancedMD handles.

Should I build directly on the AdvancedMD API or use an integration aggregator?

Operation coverage and EHR breadth decide. Breadth picks the path when every operation is documented; when one is not, take whichever vendor will name it in your contract.

How do I list my integration in the AdvancedMD Marketplace?

AdvancedMD’s Marketplace page, accessed September 3, 2026, names two prerequisites: an active developer license and a certified integration. Meeting them permits a Partner Request; a listing is still AdvancedMD’s call.

Konstantin Kalinin

Head of Content
Konstantin has worked with mobile apps since 2005 (pre-iPhone era). Helping startups and Fortune 100 companies deliver innovative apps while wearing multiple hats (consultant, delivery director, mobile agency owner, and app analyst), Konstantin has developed a deep appreciation of mobile and web technologies. He’s happy to share his knowledge with Topflight partners.
Copy link