Hi Dominic,
One important point about MutateJobService is that operations submitted through that service will most likely take longer to complete than those same operations submitted to the non-job service, e.g., AdGroupCriterionService. The reason for this is that jobs submitted through MutateJobService are queued up and prioritized, so they may not execute immediately. In contrast, operations submitted to the synchronous services such as AdGroupCriterionService are executed immediately.
Of course, if you move away from MutateJobService, you'll have to implement your own retry logic for transient errors and rate limit errors, but if speed is your top priority, this may be worth the extra development effort.
I'd recommend trying to use the non-job services for a subset of accounts to see if that provides a significant performance benefit.
Regarding grouping operations, my suggestion was to try updating ads and keywords separately. Grouping by ad group (as recommended in our
Best Practices guide) should be sufficient. When you said "changes of keywords and
URLs in separate jobs", did you mean to say "changes of keywords and
ads in separate jobs"?
Thanks,
Josh, AdWords API Team