Great project @Logan Gilbert! Recently, I published a function on Wolfram Function Repository (WFR) called GBIFSearch which I think that it would have been useful for the first part of your project. See a simple example:
ResourceFunction["GBIFSearch"][ Entity["Species", "Species:CanisLupus"],
"OccurrenceGeoRange" -> GeoBounds[Entity["Park", "YellowstoneNationalPark::zc6x9"]],
"OccurrenceDateRange" -> {DateObject[{2017}, "Year", "Gregorian", -5.`], DateObject[{2019, 1}, "Month", "Gregorian", -5.`]} ]
I also submitted a function called BioticInteractions which is closely related to your coexistence graph. It will be nice to compare your results with that function. I will let you know once BioticInteractions is available on WFR.
Do you have plans to extend your project?
Best regards