Essay · July 22, 2026
ArcPy to open source: what migrates cleanly and what fights back
Every few months a GIS manager asks the same question, usually after a licensing renewal lands on their desk: can we get off this. The honest answer is yes, mostly, and the value of the honesty is in the "mostly." Some of an ArcPy codebase lifts straight out. Some of it is welded to the platform in ways that don't show up until you're halfway through. Knowing which is which before you commit to a date is most of the job.
What migrates cleanly
The geoprocessing core is the good news. Buffers, overlays, spatial joins, reprojection, raster math: the everyday arcpy calls have direct equivalents in GDAL, Shapely, and GeoPandas, and they usually run faster because you've dropped a licensing check on every operation. Batch scripts that read a feature class, transform it, and write it back tend to port in a day, and the tests you write on the way out are often the first tests the workflow ever had.
What fights back
Then there's the welded part. Linear referencing and dynamic segmentation. Network datasets and the routing built on them. Cartographic representations and the map documents that depend on them. Geodatabase behaviors that quietly enforce topology or domains your code assumed without stating. None of these are impossible to replace, but each one is a project, not a line change, and a migration plan that treats them as line changes is a migration plan that slips.
The migration that fails isn't the one that hits a hard problem. It's the one that promised a date before it found the hard problem.
The order that works
We run the diagnostic before we quote the migration for exactly this reason. Three weeks reading the codebase produces a migration plan, effort estimates, and a risk register that names the welded parts out loud. Then the migration is fixed-fee against a scope both sides actually understand. The sprint is cheap; the surprise is expensive, so we spend money finding surprises early.
The honest limit
Sometimes the answer is don't. If a workflow leans hard on network analysis and your team has no appetite to rebuild and maintain a routing stack, the license may genuinely be the cheaper option, and we'll say so. We migrate workflows where open source makes you more independent, not less. Trading a vendor bill for a maintenance burden your team can't carry isn't a win, and pretending otherwise would cost you more than the renewal.