The .NET API has a different method where the report is retrieved as a .NET stream.
You can then initialize a new class "CsvReader" (open source) and feed that stream. That class behaves like an IDataReader. You can feed that into a LinQ class, if necessary.
That is about the idea. To give you an idea about my setup:
My goal is to get the data into a temp table on SQL Server. And I don't like CSV output, I prefer XML (with good reason, the last few years had quite a few problems and changes in CSV, but never in XML). So:
1. Request the report as GZIPPED_XML, get a stream
2. Copy that stream to a MemoryStream. This makes sure that the report is read as fast as possible. You can't keep the report stream open forever, at some time Google will close it.
3. Feed the MemoryStream to a GZipStream to decode the GZip.
4. Feed that stream to a self-made class that generates an IDataReader. Essentially it reads the XML, parses date strings in DateTime, number strings in doubles, integer string in longs, and deals will special Google pecularities like appended percentages, giving '--' for NULL etc.etc.
5. Feed that IDataReader to a SqlBulkCopy
This sounds very slow but performance is stunning, reading 20,000 to 50,000 records per second. Waiting for the report from Google takes more time.
I can't share sources, just telling this so you know which solution you should be looking for.