The code shown in the question doesn't bootstrap Drupal, nor does it load the Node module. An external script needs to do that, differently from a module. I usually use the [authenticate.php][1] file as guideline for writing code for an external script file that needs to bootstrap Drupal. ```php use Drupal\Core\DrupalKernel; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\node\NodeInterface; use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Route; // Change the directory to the Drupal root. // Edit the following line to make it point to the directory containing the autoload.php file. chdir('.'); $autoloader = (require_once 'autoload.php'); try { $request = Request::createFromGlobals(); $kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod'); $kernel->boot(); // A route is required for route matching. $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('<none>')); $request->attributes->set(RouteObjectInterface::ROUTE_NAME, '<none>'); $kernel->preHandle($request); // Ensure our request includes the session if appropriate. if (PHP_SAPI !== 'cli') { $request->setSession($kernel->getContainer()->get('session')); } } catch (HttpExceptionInterface $e) { $response = new Response('', $e->getStatusCode()); $response->prepare($request)->send(); exit; } \Drupal::moduleHandler()->addModule('system', 'core/modules/system'); \Drupal::moduleHandler()->addModule('node', 'core/modules/node'); \Drupal::moduleHandler()->load('system'); \Drupal::moduleHandler()->load('node'); $xml = simplexml_load_string(file_get_contents('./sites/default/files/migration/data.xml')); foreach ($xml->channel->item as $item) { $node = \Drupal::entityManager()->getStorage('node')->create( 'type' => 'article', 'nid' => (int)$item->nid, 'uid' => 1, 'status' => NodeInterface::PUBLISHED ]); if ($node) { // The following line isn't necessary, as create() already calls enforceIsNew(). // $node->enforceIsNew(); $node->save(); } } ``` As side note, Drupal 8 has a migration system. Instead of using an external script that bootstraps Drupal, it would be better to use that. Depending on the migration, that may require to write a custom module. Even in that case, this route is preferable, as most of the migration code has been already written. [1]: https://api.drupal.org/api/drupal/core%21authorize.php/8.9.x