Workaround for observation field limitation in export?

yes, the API definitely provides power users a lot more options. but depending on what you’re trying to accomplish, it may be a little tricky to get data from the API, if you’re starting from scratch. in Python, the pyinaturalist module can help to simplify the basic retrieval of data. (it’s well-documented, widely used, and has a good collection of example scripts, too.) however, since the API returns data as JSON with nested data structures, and since the needed results may be scattered across multiple endpoints, it still may require some work to get everything the standard iNat CSV export is capable of providing, in a tabular structure.

back in the day, i set up a JupyterLite instance with a few example Python (Pyodide) scripts in Jupyter notebooks with the bones to handle some tasks that didn’t already have good examples (that i could find at the time). the JupyterLite instance allows you to run everything entirely in a web browser without having to set up your own Python environment. the get observations example notebook gets data (in a slightly different way than pyinaturalist does), but then also has the bones for some data flattening, can get standard place names, does annotation code translations to English descriptions, handles some taxon ancestry parsing, can do some taxon id to name lookups for observation fields, etc…

there’s also a collection of basic R and Python scripts from some folks who wrote a paper about how to use iNat data, and there are miscellaneous other examples scattered in the forum and in various code repositories.