Para obter largas quantidades de registro do Sales Force via API, que em geral tem o limite de 500 registros por requisição, assim como limite máximo de offset em 2000, é necessário utilizar outros recursos disponibilizados na própria API, que não diretamente o método query, utilizado para fazer requisições.
Para isto é necessário combinar o método query com o método queryMore e o cursor queryLocator, que representa o cursor no servidor do Sales Force que mantém o rastro para a posição corrente da localização atual do conjunto de registros obtidos.
Abaixo uma utilização hipotética utilizando php para demonstrar como obter todos os registros do object Account do Sales Force
$query = " SELECT Account.Id Account.Name FROM Account ORDER BY Account.Name "; $response = $sf->query($query); while(true){ if(! ( $response && property_exists($response,'records') ) ){ break; } $Record = $response->records; if( count($Record) <=0 ){ break; } foreach($Record as $o){ $name = (property_exists($o,"Name")) ? $o->Name : null; print $name; } if(!$response->queryLocator){ break; } $response = $sf->queryMore($response->queryLocator); }