Unfortunately, MERGE functionality does not work over Linked server (at least not in 2012, not sure bout 2016). Otherwise, that's the first thing I'd suggest.
To Gary's point, I'd keep a local copy on your server, then just bring all records you want to check from the linked server to your local server (as CTE or Temp tables). Then you can use those to verify changes and eventually MERGE with your local tables.
I actually had a similar situation (where a third party app updates the tables on a remote server), but I ended up just running a procedure remote query every hour (for each table) which checks for any records which have not been inserted locally yet.
INSERT INTO [LocalDB].[dbo].[LocalTable]
([ID] --This is a PK/IDENTITY on the Remote side
FROM OPENQUERY ( [RemoteServer], 'SELECT
FROM [RemoteDB].[dbo].[RemoteTable]') AS [RemoteTable]
WHERE [RemoteTable].[ID] NOT IN (SELECT DISTINCT ([LocalTable].[ID])
That runs every hour for about 6-7 Tables, and has been doing so for the last year or two.
I also have two variables: One which counts the number of rows in the local table before the above query starts, and one that counts the number of rows in the local table after the query runs. This gives me an accurate count of how many records were inserted. I then log to a transaction table as such:
--Log the Transaction to the Replication Log
INSERT INTO [LocalDB].[dbo].[LocalLogTable]